接口测试-python encoding

背景:最近公司接口增加了很多安全校验后来发现编写用例有一个坑,改了好久仍然被挡在外面后来和rd查日志才发现是参数没有encoding。

具体是请求接口时params肯定是dict类型的就是这种{"A":"B"},因为传的json格式的,起初参数都是写死的值没有问题,后来发现写死对于case维护成本太高就修改成用orm链接数据库动态从库里取值,但是之前没有校验类型也有返回,这一版本加了params的强校验,格式不正确比如说{“KEY”:{'A':B}}这里面value在没有encoding前就是dict类型,在请求对应接口就一直会response['code']就一直非0。

后来就发现python中有一个模块json中有一个dumps的方法用起来很方便

>>> import json

>>> a={'a':{'key1':1,'key2':(1,2),'key3':[1,2,3],4:"aa"}}

>>> b=json.dumps(a)

>>> print b

{"a": {"key3": [1, 2, 3], "key2": [1, 2], "key1": 1, "4": "aa"}}


首先b["a"]["key2"]的value的类型原来是元组类型经过encoding后变成list。

其次b["a"][4]其中4的类型是int型的经过encoding后变成string类型


json.dumps()还增加了排序参数sort_keys

>>> c=json.dumps(a,sort_keys=True)

>>> print c

{"a": {"4": "aa", "key1": 1, "key2": [1, 2], "key3": [1, 2, 3]}}

这个排序是按照字典的(a到Z)排序

json.dumps()有一个参数indent可以增加缩进方便查看

>>> d=json.dumps(a,sort_keys=True,indent=3)

>>> print d

{

   "a": {

      "4": "aa", 

      "key1": 1, 

      "key2": [

         1, 

         2

      ], 

      "key3": [

         1, 

         2, 

         3

      ]

   }

}

后面还有很多目前我用到的就是这2个,后面想把python requests官方文档内容整理一下,这个库在做接口测试的时候真的很重要



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,关于使用 Python pytest requests 进行接口测试的具体方法,可以按照以下步骤进行: 1. 安装必要的库 在 Python 环境下安装 pytest 和 requests 库,可以使用以下命令: ```python pip install pytest pip install requests ``` 2. 创建测试文件和测试用例 在项目中建立一个文件夹,命名为tests(如果没有该文件夹的话),在tests文件夹下创建一个测试文件,命名为test_example.py,用于编写测试用例。 在test_example.py 文件中,先导入 pytest 和 requests 库,然后编写测试用例函数。例如: ```python import pytest import requests def test_get_example(): url = 'http://example.com/api/get' headers = {'Content-Type': 'application/json'} response = requests.get(url, headers=headers) assert response.status_code == 200 assert 'Example' in response.json() ``` 这是一个简单的 get 请求测试用例,使用 requests 库发送请求,并通过 assert 断言判断返回结果是否正确。 3. 运行测试 在项目根目录下,使用以下命令启动 pytest 运行测试用例: ```python pytest ``` 如果测试全部通过,控制台会显示如下信息: ```python ============================= test session starts ============================= ... collected 1 item test_example.py . [100%] ============================== 1 passed in 0.23s ============================== ``` 如果测试未通过,会显示具体的错误信息,如: ```python ============================= test session starts ============================= ... collected 1 item test_example.py F [100%] ================================== FAILURES =================================== ______________________________ test_get_example ______________________________ def test_get_example(): url = 'http://example.com/api/get' headers = {'Content-Type': 'application/json'} response = requests.get(url, headers=headers) assert response.status_code == 200 > assert 'Example' in response.json() test_example.py:9: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ response = <Response [500]> def json(self, **kwargs): r"""If Response's content is json, return the json-encoded content. :param \*\*kwargs: Optional arguments that ``json.loads`` takes. """ if not self.encoding and len(self.content) > 3: encodings = guess_json_utf(self.content) if encodings: try: return json.loads(self.content.decode(encodings[0]), **kwargs) except UnicodeDecodeError: pass return json.loads(self.text, **kwargs) def test_get_example(): url = 'http://example.com/api/get' headers = {'Content-Type': 'application/json'} response = requests.get(url, headers=headers) assert response.status_code == 200 > assert 'Example' in response.json() E AssertionError: assert 'Example' in None E + where None = <Response [500]>.json() test_example.py:10: AssertionError =========================== short test summary info ============================ FAILED test_example.py::test_get_example - AssertionError: assert 'Example' in... ========================= 1 failed, 1 passed in 0.45s ========================== ``` 4. 高级用法 pytest 还提供了更多功能强大的测试用例编写和运行方式,例如: - 参数化测试:使用@pytest.mark.parametrize标记来测试相同的功能,在不同的情况下运行测试。 - 报告和输出控制:控制台和报告可以被类似于```pytest -v -s --html=report.html```的命令来控制和配置。 - 使用 Fixture:pytest fixtures 将测试运行的环境和外部应用程序配置隔离开来,使测试用例更加可靠。 希望这些信息能对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值