pytest入门 -9 parametrize结合yaml实现接口自动化

2022-02-23 16:46:24 浏览数 (1)

做接口测试的时候开发都会给你一个接口文档,一般都是用swagger,做接口测试就是按照开发给的接口写测试用例然后完成测试。

我找的是微信开放文档,申请了一个测试账号

接口地址、参数说明、返回说明,咱们就是按照这三个信息进行接口测试。

看上面的接口,我们了解到接口名叫获取access_token,需要的参数有三个,(预期结果我们先写None),所以我们在yaml文件中写如下测试用例:

注意我们读取这个文件以后获取到的内容是一个list

我们新建一个test_api.py文件,代码通过parametrize传参

执行结果:

首先我们获取到了用例,如果你稍加注意的话,你会发现读取到的用例类型不再是list了,而变成了dict。

接下来我们需要获取具体的值,然后通过requests进行给接口传参了

为了方便理解,我们先不做封装

我们在调用requests进行传参时,一般用Session进行传参,因为Session可以做Cookie的关联。

request传参中,paramsget方式传参,而datajsonpost传参参数

执行:

返回结果和接口文档的预期返回值一致。

但是一个接口不可能只有一个用例,我们再加一个反例,我们一般把一个接口的用例都写在一个yaml文件中

代码改为:

执行用例以后可以看到一个通过一个没有通过。

为了说明接下来的一个问题,我们再添加一个用户创建标签的接口:

新建create_flag.yaml文件

在test_api.py文件新建方法test_create_flag

这里因为增加标签接口需要access_token,这个值需要从上一个接口的返回值中获取,所以我们定义了一个TestApi.access_token变量

执行以后可以看到两个用例都通过了。

保留代码。把get_token.yaml中的第二个用例(反例)我们先删掉,现在我们新建一个product_manage包,并新建get_token.yamladd_product.py文件,把下面的代码复制过来改一下路径

结构:

代码:

get_token.yaml(下面那个和这个一样,把反例删掉了)

test_add_product.py

代码都是复制来的,只是把yaml路径改了一下。因为发送请求方法我们没有做封装,这里需要导入TestApi那个包

按理说,现在一共三个方法,每个方法中有一个用例,我们执行时应该跑三个用例,但是当我们执行以后发现:

结果竟然执行了5个用例。

分析结果我们发现,创建标签test_create_flag接口执行了两次,test_access_token接口执行了三次。

这是因为导入类的时候,对应类下面的用例都会被执行

所以我们就不能导入带有用例的类,要把对应的方法封装出去。

代码改为:

request_util.py

test_add_product.py

test_api.py

get_token.yaml

create_flag.yaml

再次执行,就可以看到执行了三个用例了。

创建用户标签中name值每次都要变,不然就会报错,所以理论上我们要给name传动态的值的。我们以后再说。

0 人点赞