先来看看unittest + requests 是如何来做接口自动化的:

导入unittest和requests包

接口测试框架seldom_字段

 

已经非常简洁,甚至我觉得这几行代码敲下来,比postman\JMeter之类的工具更加简单,效率更高。

同样的用例,用seldom实现

 

接口测试框架seldom_html_02

 

 

接口测试框架seldom_html_03

 

 

 

个人使用过程中,觉得seldom强大在于优秀的测试数据和方便的校验。还有强大的数据驱动,文件驱动。

json文件如下:

{
"add_guest": [
["查询成功", "1","success"],
["查询成功", "0","success"]
]
}

 

报告生成也是他的优势之处,不需要在找额外的htmltestrunner来去生成报告。

接口测试框架seldom_字段_04

更强大的断言

断言接口返回的数据是我们在做接口自动化很重要的工作。

  • assertJSON 断言

例如下面的接口:

payload = {'name': 'tom', 'hobby': ['basketball', 'swim']}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.json())

 

 

 

 

 

 

{
  "args": {
    "hobby": [
      "basketball",
      "swim"
    ],
    "name": "tom"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.25.0",
    "X-Amzn-Trace-Id": "Root=1-605b562f-5746980d5fa5ce5513f20310"
  },
  "origin": "113.87.13.41",
  "url": "http://httpbin.org/get?name=tom&hobby=basketball&hobby=swim"
}

我的目标是断言name 和 hobby 部分的内容。

unittest + requests的写法。

import unittest
import requests


class TestAPI(unittest.TestCase):

    def test_get_method(self):
        payload = {'name': 'tom', 'hobby': ['basketball', 'swim']}
        r = requests.get("http://httpbin.org/get", params=payload)
        ret = r.json()
        self.assertEqual(ret["args"]["hobby"], ['basketball', 'swim'])
        self.assertEqual(ret["args"]["name"], 'tom')

假设接口返回的 basktballswim 顺序反了,断言就会失败,但其实这个列表可以是无序的。

再来看看seldom中的断言。

import seldom


class TestAPI(seldom.HttpRequest):

    def test_get_method(self):
        payload = {'name': 'tom', 'hobby': ['basketball', 'swim']}
        self.get("http://httpbin.org/get", params=payload)
        assert_json = {'args': {'hobby': ['swim', 'basketball'], 'name': 'tom'}}
        self.assertJSON(assert_json)

将你要检查的字段写出来,层级关系是正确的即可,上面特意对调了 basktballswim 的位置。