标签: web-api-testing

如何使用Rest Assured在GET URL中传递查询字符串参数?

如何使用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

5
推荐指数
2
解决办法
1万
查看次数

当开发人员将新请求更新到 api 时,如何更新 Postman 集合

我在 Swagger 中有我的 API 文档,它们有不同的端点或请求。我使用swagger.jsonSwagger 中 API 的链接将它们作为集合导入 Postman,然后在那里添加测试用例。

但我对一件事感到困惑,如果开发人员向 API 添加更多请求,我如何在不影响测试用例的情况下导入新请求。

例如:
在一种情况下,我有一个带有 65 个请求的 API,我从 Swagger UI 导入并编写了测试用例。然后几天后,我使用相同的链接导入,请求数量更改为 69,这意味着添加了 4 个新请求,但 Postman 用测试用例替换了整个集合。

automated-tests swagger postman web-api-testing

5
推荐指数
2
解决办法
8190
查看次数

在Karate中,我们如何与BA合作以实现业务场景的自动化

在使用Karate时,我们能够对Web服务进行大部分验证,我们能够成功地将Karate与Selenium webdriver集成,并使用java类进行数据库断言.对于DB,我们将结果集作为列表返回,方法是将每一行转换为hashmap,Karate将其作为json数组.因此验证变得简单.我们在QA方面的大多数需求都是使用空手道实现的.

然而,今天我们介绍的时候,对于一个更大的社区,其中一个开发者提出了一个问题.他是JBehave,BDD,jsonpath,java,Web服务等方面的专家.我们也认为他的问题在我们的背景下非常相关.然而,空手道的方法是不同的,根据我们的知识它可能不起作用.

在我们的上下文中,我们需要让BA使用业务术语考虑他们的业务场景来编写BDD,然后QA/Dev可以将这些作为脚本转换.(我们通常使用黄瓜+硒/放心等方法).举例来说,如果我有一个特征文件10分的情况在,人在业务方面将无法理解验证看到空手道的步骤的细节/或另一个词纯英文文本会更多一点不言自明他们.我们需要这种方法,因为我们试图从故事层面本身实施流程变更.

你能分享一下你的想法吗?

bdd cucumber cucumber-jvm web-api-testing karate

5
推荐指数
1
解决办法
5168
查看次数

如何处理Postman密码中带有特殊字符的URL?

我的网址格式如下。

http://username:password@test.nabin.com/some/url
Run Code Online (Sandbox Code Playgroud)

这里的密码类似于qDTA * $ X)ME / 74。当我直接在URL中使用此密码时,邮递员不会响应。我应该如何继续测试该网址?

(在图像中,响应容器为纯白色,没有任何错误。这表明该API从未被使用过) 在此处输入图片说明

postman web-api-testing

5
推荐指数
1
解决办法
6639
查看次数

How to encapsulate mocha `expect()` code?

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)

javascript currying supertest web-api-testing

5
推荐指数
1
解决办法
154
查看次数

如何部分比较 Cypress 断言中的深层嵌套对象?

我使用Cypress作为 API 和 UI 测试的自动化框架。我已经编写了多个正在运行并通过的 API 测试,但它们只是验证返回response.status200. 我想将来自 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)

错误= …

chai web-api-testing cypress

5
推荐指数
1
解决办法
1万
查看次数

Selenium v​​s XmlUnit + HttpClient用于Web REST API测试

我需要以REST格式测试Web API函数.目前使用Selenium RC对网站进行功能测试.并使用XmlUnitHttpClient功能测试我们的REST API.但是,如果我们能够真正将功能测试代码分离到所有的硒中,那么生活似乎会更容易.特别是使用Selenium 2.0的WebDriver,使用它来测试XML响应比以往任何时候都容易XPath.

我在Pro XmlUnit+HttpClient营地的想法:

  • 允许使用直接数据库调用或Spring bean轻松进行测试
  • 更容易允许在/我们将来支持时测试JSON响应
  • selenium用于Web UI,而不是REST API测试

我在Pro Selenium WebDriver营地的想法:

  • 将功能测试全部分解为标准的硒测试
  • 通过使用我们的其他selenium UI测试轻松测试结果,进一步测试UI
  • 允许其他人而不是核心开发人员审查功能API测试
  • 也许更容易使用像BrowserMob这样使用selenium测试的服务来加载测试API?
  • 希望用selenium框架更快地进行功能测试

我们正在使用Spring 3和hibernate.什么是最好的功能测试我们的API?

testing selenium functional-testing selenium-rc web-api-testing

4
推荐指数
1
解决办法
6396
查看次数

如何使用 JSON 响应通过 Rest Assured 基于正文项进行断言?

如何使用放心的 .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

4
推荐指数
1
解决办法
2万
查看次数

如何在 Java 中向改造请求添加不记名令牌

嗨,我正在尝试向 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)

java testing cucumber web-api-testing retrofit2

4
推荐指数
1
解决办法
6077
查看次数

邮差 - 如何存储多个请求的随机值?

我想存储随机值,例如在第一个请求中生成的 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)

所有四个请求的正文看起来都相同。唯一的区别是我有一个仅适用于第一个请求的预请求脚本,我在其中生成随机值并将它们保存为全局变量。我想要实现的是在第一个请求中生成随机电子邮件、名字和姓氏,并在所有四个请求中使用相同的值(存储为全局变量)。但是,由于某种原因,每个请求都会生成新的电子邮件、名字和姓氏,这不是我想要的。

有没有办法让它按照我想要的方式工作?

javascript postman web-api-testing

4
推荐指数
1
解决办法
1366
查看次数