紧接着上篇文章,这篇文章主要是解决传入数据格式异常的情况下应该怎么去封装和传递数据。
一、首先我们要把之前正常的数据改成异常的数据
修改demo.yaml文件为:在每组测试用例的最前边加上对这个测试用例的解释说明:
- 参数name为空:
name: ""
parentid: 1
expect: 40058 #对请求结果进行断言
- 参数parentid为空:
name: 广州研发中心
parentid:
expect: 60004 #对请求结果进行断言
二、添加读取文件的代码
在utils.py中添加如下代码,是用于方便数据的读取的:
并新建一组测试用例test02,用于展示并打印用例的执行情况,test_demo.py修改为:
class TestDemo:
#创建部门时要先获取一个token
def setup_class(self):
self.dept = DeptMent()
def test_01(self):
r = self.dept.create()
assert r.json()["errcode"] == 0
@pytest.mark.parametrize("case", read_yaml("demo.yaml"))
def test_02(self, case):
print(case)
if __name__ == '__main__':
pytest.main()
@pytest.mark.parametrize("case", read_yaml("demo.yaml"))用数据驱动去传递demo.yaml中的数据。
这时候我们可以看到用例已经执行成功,并且已经将执行情况打印在了字典中:
三、添加json_data参数
然后我们现在需要通过循环把Key和value拿到,然后把拿到的value传到创建部门的接口里面,就是dept.py文件里面:
1、在dept.py文件里面新加一个参数json_data=None,这就表示如果外部不传进来参数的话,我们就默认使用文件里面随机生成的参数。
2、在qywx_api.py问文件中的wechat_send函数中也要把json_data=None传进去,因为毕竟它原来是不带json_data=None这个参数的:
3、我们在底层最好也加上这个参数,就是在http_protocol.py文件中页加上这个参数:
四、封装替换异常参数的数据
1、然后去封装替换的方法:写到一个新的函数里面:
2、之后我们就可以再在里面做一个判断了,具体代码如下列所示:
在每次发送请求之前先去判断一下json_data是否为空,如果不为空,就说明有异常的数据传送过来,那么就可能需要我们去做一些参数的 替换(哪些参数不符合要求的参数):
3、然后我们来看一下http_protocol.py文件整体的代码方便大家比对代码:
class HttpClien:
def send(self, method, url, json_data=None, **kwargs):
if json_data is not None:
for key, value in json_data.items():
if "headers" in kwargs.keys():
self.replace_val(kwargs["headers"], f"$..{key}", value)
if "params" in kwargs.keys():
self.replace_val(kwargs["params"], f"$..{key}", value)
if "json" in kwargs.keys():
self.replace_val(kwargs["json"], f"$..{key}", value)
if "data" in kwargs.keys():
self.replace_val(kwargs["data"], f"$..{key}", value)
res = requests.request(method, url, **kwargs)
return res
def replace_val(self, data, jsonpath_expr, value):
#传递三个参数,data为要替换的数据,jsonpath_expr为一个语法,value为要替换的值
p = parse(jsonpath_expr)
return p.update(data, value)
五、测试用例编写与执行
在test_demo.py文件中加上一个循环去获取key和value,并且把数据传到创建部门的接口里面,并且对请求结果的返回码做一个断言:该文件test02用例代码修改为:
这时候参数就已经传到创建部门的接口里面了,然后我们来看一下用例的执行情况:
用例成功且断言成功。