如何使用Rest Assured在GET URL中传递查询字符串参数?
网址是: http://example.com/building
我的查询字符串是:
globalDates:{"startMs":1473672973818,"endMs":1481448973817,"period":90}
limitTo:6
loadTvData:true
startFrom:0
userId:5834fb36981baacb6a876427
Run Code Online (Sandbox Code Playgroud) api automated-tests restful-architecture rest-assured web-api-testing
我在 Swagger 中有我的 API 文档,它们有不同的端点或请求。我使用swagger.jsonSwagger 中 API 的链接将它们作为集合导入 Postman,然后在那里添加测试用例。
但我对一件事感到困惑,如果开发人员向 API 添加更多请求,我如何在不影响测试用例的情况下导入新请求。
例如:
在一种情况下,我有一个带有 65 个请求的 API,我从 Swagger UI 导入并编写了测试用例。然后几天后,我使用相同的链接导入,请求数量更改为 69,这意味着添加了 4 个新请求,但 Postman 用测试用例替换了整个集合。
在使用Karate时,我们能够对Web服务进行大部分验证,我们能够成功地将Karate与Selenium webdriver集成,并使用java类进行数据库断言.对于DB,我们将结果集作为列表返回,方法是将每一行转换为hashmap,Karate将其作为json数组.因此验证变得简单.我们在QA方面的大多数需求都是使用空手道实现的.
然而,今天我们介绍的时候,对于一个更大的社区,其中一个开发者提出了一个问题.他是JBehave,BDD,jsonpath,java,Web服务等方面的专家.我们也认为他的问题在我们的背景下非常相关.然而,空手道的方法是不同的,根据我们的知识它可能不起作用.
在我们的上下文中,我们需要让BA使用业务术语考虑他们的业务场景来编写BDD,然后QA/Dev可以将这些作为脚本转换.(我们通常使用黄瓜+硒/放心等方法).举例来说,如果我有一个特征文件和10分的情况在,人在业务方面将无法理解验证看到空手道的步骤的细节/或另一个词纯英文文本会更多一点不言自明他们.我们需要这种方法,因为我们试图从故事层面本身实施流程变更.
你能分享一下你的想法吗?
我的网址格式如下。
http://username:password@test.nabin.com/some/url
Run Code Online (Sandbox Code Playgroud)
这里的密码类似于qDTA * $ X)ME / 74。当我直接在URL中使用此密码时,邮递员不会响应。我应该如何继续测试该网址?
I'm trying to test for the presence of some api response properties that I want to require across all tests (a status and data property).
Here's a generic test that asserts the desired properties in a supertest expect() method:
it('should create a widget', done => {
let status = 200;
request(test_url)
.post('/api/widgets')
.set('Authorization', `Bearer ${token}`)
.send({
sku: my_widget_data.sku,
name: my_widget_data.name,
description: ''
})
.expect(res => {
assert(
Object.keys(res.body).includes('status'),
'`status` is a required field'
);
assert(
Object.keys(res.body).includes('data'),
'`data` is a required …Run Code Online (Sandbox Code Playgroud) 我使用Cypress作为 API 和 UI 测试的自动化框架。我已经编写了多个正在运行并通过的 API 测试,但它们只是验证返回response.status的200. 我想将来自 a 的响应 jsonGET与存储的“预期”响应进行比较,以确认 JSON 响应数据是正确的。
我在我的代码块中尝试了to.deep.equal和的不同变体。但我不想验证只有一个字段返回正确的值,我想验证一堆不同的字段是否返回正确的值。我的请求返回超过 100 行嵌套的 JSON 字段/值,而我只想验证彼此嵌套的 20 个左右的字段/值。deepEquals.then(response => {}GET
cy.request({
method: 'GET',
log: true,
url: 'https://dev.api.random.com/calculators/run-calculate/524/ABC',
headers: {
'content-type': 'application/json',
'x-api-key': calcXApiKey
},
body: {}
}).then(response => {
const respGet = response.body
const tPrice = response.body.data.calculations.t_costs[0].comparison.t_price
cy.log(respGet, tPrice)
assert.deepEqual({
tPrice
}, {
t_price: '359701'
})
// assert.equal(response.status, 200) -- This works great
})
Run Code Online (Sandbox Code Playgroud)
错误= …
我需要以REST格式测试Web API函数.目前使用Selenium RC对网站进行功能测试.并使用XmlUnit和HttpClient功能测试我们的REST API.但是,如果我们能够真正将功能测试代码分离到所有的硒中,那么生活似乎会更容易.特别是使用Selenium 2.0的WebDriver,使用它来测试XML响应比以往任何时候都容易XPath.
我在Pro XmlUnit+HttpClient营地的想法:
我在Pro Selenium WebDriver营地的想法:
我们正在使用Spring 3和hibernate.什么是最好的功能测试我们的API?
testing selenium functional-testing selenium-rc web-api-testing
如何使用放心的 .body() 方法在“描述”数组中断言我的属性。
例子:
.body ("[0] .userType", equalTo (1)); // error
Run Code Online (Sandbox Code Playgroud)
这是我当前想要断言的 JSON 数据:
{
"validSession": true,
"value": "xxx",
"description": [
{
"userType": 1,
"userTypeDescription": "xxx",
"uname": "xx",
"distributorId": 1
}
]}
Run Code Online (Sandbox Code Playgroud) java rest rest-assured web-api-testing rest-assured-jsonpath
嗨,我正在尝试向 Java 中的改造调用添加不记名令牌,但我似乎无法通过它。
目前我使用一种方法登录,这会创建一个不记名令牌,我试图将令牌添加到 Get Call,但它只是返回 401 错误,我是否正确地将令牌添加到调用中?
@GET("diagnosis/configuration")
Call<ResponseBody> getFavourites (@Query("favourite") Boolean fave,@Header("Bearer Token") String authHeader);
@POST("auth/login")
Call<LoginResponse> postLogin (@Body LoginCredentialsBody body);
public class LoginApiStepDefinition extends TestBaseFix {
Retrofit retrofit = super.buildRetrofit(super.buildOkHttpClient());
RetrofitCallsLogin call = retrofit.create(RetrofitCallsLogin.class);
RetrofitCallsGetFavourites favecall = retrofit.create(RetrofitCallsGetFavourites.class);
private Response<LoginResponse> responseBody;
private String favouritesResponseBody;
String usernameValue;
String passwordValue;
@And("I login with {string} and {string} to return login token")
public void iLoginWithAndToReturnLoginToken(String username, String password) throws Exception {
LoginApi(username, password);
}
public String LoginApi(String username, String password) throws …Run Code Online (Sandbox Code Playgroud) 我想存储随机值,例如在第一个请求中生成的 randomEmail ,并 在接下来的三个请求中使用相同的电子邮件。这是我的第一个请求的预请求脚本的样子:
const email = "{{$randomEmail}}"
const firstName = "{{$randomFirstName}}"
const lastName = "{{$randomLastName}}"
pm.globals.set('email', email)
pm.globals.set('firstName', firstName)
pm.globals.set('lastName', lastName)
Run Code Online (Sandbox Code Playgroud)
所以基本上我生成随机电子邮件、名字和姓氏,我想将它们存储为全局变量,以便稍后使用。
我的请求正文如下所示:
{ "accountId": "{{accountId}}", "email": "{{email}}", "firstName": "{{firstName}}", "lastName": "{{lastName}}", "locale": "en-GB", "mobile": "1234567890", "contactable": true}
Run Code Online (Sandbox Code Playgroud)
所有四个请求的正文看起来都相同。唯一的区别是我有一个仅适用于第一个请求的预请求脚本,我在其中生成随机值并将它们保存为全局变量。我想要实现的是在第一个请求中生成随机电子邮件、名字和姓氏,并在所有四个请求中使用相同的值(存储为全局变量)。但是,由于某种原因,每个请求都会生成新的电子邮件、名字和姓氏,这不是我想要的。
有没有办法让它按照我想要的方式工作?
web-api-testing ×10
postman ×3
cucumber ×2
java ×2
javascript ×2
rest-assured ×2
testing ×2
api ×1
bdd ×1
chai ×1
cucumber-jvm ×1
currying ×1
cypress ×1
karate ×1
rest ×1
retrofit2 ×1
selenium ×1
selenium-rc ×1
supertest ×1
swagger ×1