Python接口自动化测试之UnitTest详解_接口自动化测试框架unittest


![在这里插入图片描述](https://img-blog.csdnimg.cn/6a18c9e73dd749f2b064d9c92108aa87.png)  
 可以看到,使用了setUpClass()方法就只初始化了一次,teardown没使用就每条用例都会执行一次。


### 常用方法


### 断言


测试用例中还有常用的断言和skip跳过测试用例。在UniTtest框架中也提供了一个自带的断言方式,主要有以下几种:![在这里插入图片描述](https://img-blog.csdnimg.cn/7cd0d66e0d92475ba86a548663abf56a.png)


### skip跳过


在实际测试中,如有功能缺陷的功能点对应的自动化测试用例执行不了,或者不执行的用例,可以用skip()方法来操作,使用方法为:


1.unittest.skip(‘输入理由’)——无条件执行跳过操作


2.unittest.skipif(2>1,’理由’)——判断条件为true的时候执行


3.unittest.skipUnless(1>2’理由’)—判断条件为false的时候执行


4.unittest.expectedFailure—执行错误不计入不通过用例中


下面查看示例,testcase1方法被跳过,testcase2方法使用了断言,但是断言结果不对,于是有报错信息:



import unittest
class Test_unittest(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
print(‘setup’)
@unittest.skip
def testcase1(self):
print(‘testcase1’)
def testcase2(self):
a = 1
self.assertEqual(a,2,msg=‘error’)
print(‘testcase2’)
def tearDown(self) -> None:
print(‘teardown’)
if name == ‘main’:
unittest.main()


![在这里插入图片描述](https://img-blog.csdnimg.cn/8daede1c77364f8db679b62213710f8f.png)


### 测试套件


当一个类里有多个测试用例又不会同时运行的时候,可以选择把测试用例添加到suite中,中suite运行(pycharm中直接在文件中写不行,要重新新建一个py文件)。


1.直接一个一个添加到suite中:


![在这里插入图片描述](https://img-blog.csdnimg.cn/1b1c292fad734f86a581e0da04696399.png)


解释:导入该文件中的类,定义一个套件名称,使用testsuite方法,对该套件添加测试用例,定义一个运行名称,使用运行方法,添加测试套件,即可运行(得一个个的添加测试用例)。


2.定义一个列表【】把用例都存进去,然后运行:![在这里插入图片描述](https://img-blog.csdnimg.cn/0e8016f67e0242e5b6a1fa6d4b56927a.png)


3.直接读取类名的形式来运行(最简单,最方便,不能使用‘’):![在这里插入图片描述](https://img-blog.csdnimg.cn/f81b3c8d89c34229a2936b7ff589d0fe.png)  
 4.也是读取名字,不过容易找不到类,需要在前面加一个文件名。


### TestRunner


1.编写完脚本之后重新新建一个文件然后添加用例到suite,即可全部执行。


2.在网上下载htmlTestrunner源码,复制到python/lib目录即可import导入:![在这里插入图片描述](https://img-blog.csdnimg.cn/94c0b79a404b4a3d9504351fc8b7423f.png)


### Python之request


### 主要方法解析


requests是Python实现的最简单易用的HTTP库,requests库7个主要方法:![在这里插入图片描述](https://img-blog.csdnimg.cn/8122ac8fa4ed472399027c377cdfd268.png)


举例:普通接口测试的接口之间没有关联性,所以直接定义变量去发起get、post请求即可。![在这里插入图片描述](https://img-blog.csdnimg.cn/57e1be2c64284f33a895ad54fd0cc2f2.png) 


其中post的请求常用的分为json和formdata,两种方式请求的参数方式如截图所示。需要鉴权的,需要导入auth包,然后跟在请求方法后面。


### requests方法详解


具体方法查看可以直接按住ctrl+左键点击requests方法查看源码。


![在这里插入图片描述](https://img-blog.csdnimg.cn/53a84e1be47d4038970fdc963696122f.png)


1.url: 请求地址


2.data:字典,字节序列或文件对象,作为Request的内容


3.json: JSON格式的数据,作为Request的内容


4.headers: 字典, HTTP定制头


5.cookie: 字典或CooKiJar, Request中的cookie


6.auth: 元祖,支持HTTP认证功能


7.files: 字典类型,传输文件


8.timeout: 设定超时时间,秒为单位


9.proxies: 字典类型,设定访问代理服务器,可以增加登录认证


10.allow\_redirects: True/False,默认为True,重定向开关


11.stream: True/False,默认为True,获取内容立即下载开关


12.verity: True/False默认Ture,认证ssl证书开关


13.cert: 本地ssl证书路径


### Response返回方法详解


1.response.status\_code #返回的http响应状态码


2.response.content #返回的是bytes型也就是二进制的数据


3.response.headers # 返回的http请求头


4.response.json() # 返回响应中的Json数据


5.response.url # 返回url


6.response.encoding # 返回响应的编码格式


7.response.cookies # 返回响应中的cookie


8.response.text #返回的是Unicode型的数据。—文本


### Session详解


对于需要前后接口依赖的接口测试,比如从上一个请求中获取token用作下一个接口请求的参数去提交的话,用上面一种方法明显不合适,按照上面的方法需要定义很多变量,然后根据依赖去添加到对应的请求参数里。


下面这种方法,使用session会话的方式,贯穿前后,只要添加了一次,所有请求都能用到。![在这里插入图片描述](https://img-blog.csdnimg.cn/a0ecb4b939e0403794035dcb4d8f5482.png)


解释:


1.这个是cynthia缺陷管理系统,登录的时候需要拿到响应里的cookie作为下一个请求的cookie,不然登录不上。


2.所以在UniTtest结构中,可以把登录操作放到setup里面,类似UI自动化一样,登录放在初始化中。


3.在setup中把响应的cookie值,加入到请求的里面去了,同时添加了浏览器UA。


4.参数可以复用,从头到尾请求的变量都是rsp,body里的参数都是dict,编写简单方便。![在这里插入图片描述](https://img-blog.csdnimg.cn/0df3eeab306442f4ba0fc49eb02824f9.png)


定义一个变量s等于requests的session会话,后面都用这个s的会话去发起请求。


定义一个变量等于rsp等于s去发起请求的结果。


s会话请求的头文件中cookie需要添加tokenid,不然登录不上,这个id在rsp响应信息里。


因为响应信息是json字典格式,所以要添加到请求头里需要按照截图格式。


如果需要在字典中添加字段或者内容,按照截图的格式s.headers[‘xxx’]=“xxx”,如果字典中有这个key:value,那么value值会直接更新,没有这个key那么则会添加这个key:value到字典。


### 接口实战


### 添加token到头文件中


在公司实际项目中,调接口首先需要获取token,要先调用获取token的请求,然后拿到token值之后,在后面接口中添加到头文件中。


![在这里插入图片描述](https://img-blog.csdnimg.cn/59d2dacf350642b4800aa5e1524a481f.png)


self.session.headers.update({“token”:rsp.json()[‘data’][‘token’]})  
 (左右滑动查看完整代码)


通过在setup初始化方法中调用获取token,来拿到token的值,然后添加到整个session的head中去,后续请求中都不需要额外添加head了。


### 使用ddt做参数化


ddt数据驱动测试,首先pip list ddt,安装第三方库,在代码最上方导入库中的data


from ddt import ddt,data,在测试类前面声明ddt,用@ddt:


![在这里插入图片描述](https://img-blog.csdnimg.cn/81c2f84ed8bd470d9eb04400ecdbb7c5.png)


1、在测试用例前声明使用data,用@data:



@data(‘test1’,‘test2’)
def test_ddt1(self,value):
print(value)在这里插入代码片
(左右滑动查看完整代码)


运行结果中该用例执行了两次,分别输出的test1和test2。


2、data用法读取文件


此方法需要解包,故需要用到unpack方法,在测试用例前声明@unpack即可。



def readline(self):
date = []
file = open(‘D:\base64\keyid.txt’,‘r’,encoding=‘utf-8’)
for line in file:
date.append(line.split())
return date
@data(*readline(“”))
@unpack
def test_ddt2(self,vars):
print(vars)


对运行结果解释:定义一个读取文件的方法,定义一个list数组,使用file函数的open方法,读取文件名为“txt1”的文件,以read的形式,编码格式为utf-8,以for循环的方式一直循环读取每一行,以\n换行符为一行结尾,以逗号分隔每一个参数,最后返回data值以便下方直接调用。


上面写了读取方法之后,在测试用例前,直接使用该方法即可,@data(\*readfile())这种形式,接着使用@unpack解包的方法即可。![在这里插入图片描述](https://img-blog.csdnimg.cn/520fd92ad212455e8eae4e4f3e3d25c6.png)


### 生成测试报告


按照上述的方法编写好测试用例后,结合UniTtest框架生成报告的HTMLTestRunner来生成接口测试报告。![在这里插入图片描述](https://img-blog.csdnimg.cn/51d816fe939c4b509002e72774ef7593.png)


从网上找的HTMLTestRunner库文件,下载后放到Python安装目录的lib文件夹中就行,后续就可以直接调用了https://github.com/GoverSky/HTMLTestRunner\_cn/issues![在这里插入图片描述](https://img-blog.csdnimg.cn/4037f821611344baa9bdbe836ead1e6e.png)


**最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:**


#### 


这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 


![](https://img-blog.csdnimg.cn/direct/d948a128d57c433786cf52398b6d17ef.png)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值