标签: web-api-testing

使用SoapUI vs Postman与Runscope进行API测试

我是新手使用应用程序来测试后端API.我总是只使用前端应用程序进行手动测试.我想要做的是使用专为后端API测试而设计的应用程序.到目前为止,我已被定向到SoapUI,Postman和Runscope.但我很茫然,因为我更像是一名测试分析师而不是程序员,尽管我在Selenium中使用JavaScript,Python和Ruby进行自动化测试.有什么建议?思考?警告?

(我也把它发布到质量检查页面,很抱歉重复的问题)

automated-tests soapui runscope postman web-api-testing

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

API数据在控制台中返回Unicode字符

自从过去两天以来,我面临一个相当混乱的问题.我正在开发一个文档管理系统,它使用从SOLR中提取数据的API.数据约为15Mbs,并提取超过4000个文档的记录.API有这种格式的响应 -

{
    "documents": [
        {
            id: 123,
            some_field: "abcd",
            some_other_field: "abcdef"
        },
        {
            id: 124,
            some_field: "abcd1",
            some_other_field: "abcdef1"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在浏览器中一切正常.如果我在Chrome或Firefox浏览器中点击端点,它会给我正确的输出,我能够看到JSON输出.

但是,如果我尝试使用Java或JS代码访问相同的API端点 - 响应代码为200,但控制台(终端或Eclipse)中\u0089 \u0078 U+0080的输出显示类似的unicode字符- 所有输出都以这种方式出现,并且因为有API提取了大约4000多条记录,控制台有点填充所有这些unicode字符.

我在浏览器和代码之间看到的唯一区别是,在浏览器中我可以看到Content-Encoding : gzip,而我无法从我编写的代码中找到此标头.例如 - 在JS代码中,通过Chakram框架,我可以检查

expect(response).to.be.encoded.with.gzip

这里提到的.但是,这会返回失败说明expected undefined to match gzip

我在这里错过了什么?这是与编码/解码有关的东西还是完全不同的东西?

编辑1:NetworkChrome标签中显示的响应标题:

cache-control: max-age=0, private, must-revalidate, max-age=315360000
content-encoding: gzip
content-type: application/json; charset=utf-8
date: Tue, 22 May 2018 06:07:26 GMT
etag: "a07eb7c1eef4ab97699afc8d61fb9c5d"
expires: Fri, 19 May 2028 06:07:26 GMT
p3p: …
Run Code Online (Sandbox Code Playgroud)

javascript api encoding web-api-testing

7
推荐指数
1
解决办法
431
查看次数

如何在 python 中使用 pytest 使用 json 数组测试数据参数化测试?

我有一些测试用例和测试数据,其中测试数据采用 JSON 数组形式,如下所示:

{
    "valid_data": [
       {
           "id": "1234",
           "name": "John"
       },
       {
           "id": "2234",
           "name": "Mary"
       },
       {
           "id": "3234",
           "name": "Kenny"
       },
    ],
    "invalid_data": [
       {
           "id": "1234",
           "name": "Mary"
       },
       {
           "id": "2234",
           "name": "Kenny"
       },
       {
           "id": "3234",
           "name": "John"
       },
    ]
}
Run Code Online (Sandbox Code Playgroud)

我现在正在测试一个 API,它将接受 JSON 作为输入,并以状态代码进行响应。如果 id 和名称在数据库中匹配,它将响应 200 OK。否则会出现 400 Bad Request。

这是我当前的测试用例:

def get_test_data(filename):
    folder_path = os.path.abspath(Path(os.path.dirname(__file__)))
    folder = os.path.join(folder_path, 'TestData')
    jsonfile = os.path.join(folder, filename)
    with open(jsonfile) as file:
        data = json.load(file)
    return …
Run Code Online (Sandbox Code Playgroud)

python json automated-tests pytest web-api-testing

7
推荐指数
1
解决办法
9804
查看次数

邮递员-如何在我收到特定回复之前循环请求?

我正在用Postman测试API,但遇到了一个问题:我的请求转到了某种中间件,因此我收到了完整的1000+行JSON,或者收到PENDING状态和空数组:

{
  "meta": {
    "status": "PENDING",
    "missing_connectors_count": 0,
    "xxx_type": "INTERNATIONAL"
  },
  "results": []
}
Run Code Online (Sandbox Code Playgroud)

问题是,如何在邮递员中循环此请求,直到获得状态SUCCESS和结果array > 0?当我手动一个接一个地发送这些请求时,可以,但是当我通过Collection Runner运行它们时,“ PENDING”会弄乱所有内容。

postman web-api-testing postman-collection-runner

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

如何使用 Flask test_client 上传多个文件?

如何使用 Flask test_client 将多个文件上传到一个 API 端点?

我正在尝试使用 Flask test_client 将多个文件上传到一个 Web 服务,该服务接受多个文件并将它们组合成一个大文件。

我的控制器看起来像这样:

@app.route("/combine/file", methods=["POST"])
@flask_login.login_required
def combine_files():

  user = flask_login.current_user

  combined_file_name = request.form.get("file_name")

  # Store file locally
  file_infos = []
  for file_data in request.files.getlist('file[]'):

    # Get the content of the file
    file_temp_path="/tmp/{}-request.csv".format(file_id)
    file_data.save(file_temp_path)

    # Create a namedtuple with information about the file
    FileInfo = namedtuple("FileInfo", ["id", "name", "path"])
    file_infos.append(
      FileInfo(
        id=file_id,
        name=file_data.filename,
        path=file_temp_path
      )
    )
    ...
Run Code Online (Sandbox Code Playgroud)

我的测试代码如下所示:

def test_combine_file(get_project_files):

project = get_project_files["project"]

r = web_client.post(
    "/combine/file",
    content_type='multipart/form-data',
    buffered=True,
    follow_redirects=True, …
Run Code Online (Sandbox Code Playgroud)

python flask python-unittest multiple-file-upload web-api-testing

6
推荐指数
1
解决办法
4153
查看次数

Jmeter:- 如何在“Jmeter”中同时/顺序发送多个请求,并为每个请求设置不同的值?

例如,下面是在数据库中“添加设备”的 JSON 请求数据。例如,我想将 10000 个具有不同 IMEI 号码和不同电话号码的设备添加到服务器以进行测试。那么,如何一次发送请求呢?我准备手动创建 10000 个具有不同值的设备数据。现在只能一一发送,但是如何一次性发送所有请求呢?

{ "device_name":"34793812453274392", "imei_num":"36xxxxxxxxxxxx5", "phone_num":"8666606451", "device_city":"钦奈", "device_state":"泰米尔纳德邦", }

由于我是 Jmeter 新手,需要详细信息。提前致谢。

api rest jmeter web-api-testing

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

无法使用 RestSharp 断言错误请求 [HTTP 400 错误]。抛出 System.Net.Http.HttpRequestException

我使用 RestSharp 编写了以下测试,预期结果是返回错误 400 以及一些 Json 格式的错误消息。

但以下测试在等待 client.PostAsync(request) 处失败并抛出“System.Net.Http.HttpRequestException:请求失败,状态代码为 BadRequest”,并且未到达断言语句。

使用 Fiddler 我验证了我的请求,并且响应按预期工作。

将不胜感激任何解决这个问题的建议。谢谢你!

    [Test]
    public async Task Test1Async()
    {
        var jsonData = json;
        var client = new RestClient(endpoint);
        var request = new RestRequest();
        request.AddStringBody(jsonData, ContentType.Json);
        var response = await client.PostAsync(request);
        Assert.AreEqual(400, response.StatusCode);
    }
Run Code Online (Sandbox Code Playgroud)

有效的解决方案。谢谢尼古拉斯·费尔赫斯特...

    [Test]
    public async Task Test1Async()
    {
        var jsonData = json;
        var client = new RestClient(endpoint);
        var request = new RestRequest();
        request.AddStringBody(jsonData, ContentType.Json);
        var response = await client.ExecutePostAsync(request);
        Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
    }
Run Code Online (Sandbox Code Playgroud)

c# restsharp web-api-testing

6
推荐指数
1
解决办法
3850
查看次数

如何部分比较 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万
查看次数

pytest 请求测试中使用的夹具参数

我已参数化我的装置来调用 API,每次调用时使用不同的输入数据来发送请求,范围为class. 因为我需要检查 API 响应与发送的数据。我需要将灯具的请求参数读取到测试中。

class Test_create_fixture():

@pytest.fixture(scope="class", params=[0, 1])
def my_fixture(self, request):
    "Call incident creation api."

    # POST request to API using params value in request data, get data from API      
    my_data = {'abc': 123, 'severity': 0} # this data is from API

    self.data = {'severity': request.param}

    return my_data

def test_incident_severity(self, my_fixture, request):
    print("self.data", self.data) # 'Test_create_fixture' object has no attribute 'data'
    assert my_fixture.get('severity', False) == request.param # AttributeError: 'FixtureRequest' object has no attribute 'param'
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个时,我无法将传递给固定装置的请求参数读取到测试中。还尝试保存在实例变量中,但没有成功。我观察到固定装置中和测试中id() …

python self pytest web-api-testing python-3.6

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

有 Mozilla marionette 协议命令的文档吗?

Marionette是一种用于远程控制 Mozilla 浏览器的协议。Chromium 有用于相同目的的DevTools协议,并在此处进行了记录

Marionette这里有一些粗略的文档,但是有可用命令和参数的正确列表吗?可以以某种方式从 Mozilla 源中提取它吗?(就像 Chromium 有PDL一样。)

[0,1,"WebDriver:Navigate",{"url":"http://awe.lv"}]}] 我所说的命令是指“WebDriver:GetTitle”、[0,2,"WebDriver:ExecuteAsyncScript",{"script":"alert('Hello!')"}] “WebDriver:GetWindowHandle”、“WebDriver:GetWindowRect”、“WebDriver:TakeScreenshot”和“WebDriver:GetPageSource”之类的命令。特别是,我想像使用 DevTools 的方法一样观察网络流量Network.enable

是否还有其他可用前缀(“WebDriver:”除外)?我们可以通过 Marionette使用Web API吗?

web-api-testing firefox-marionette

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