[接口自动化]使用python+unittest+request来完成一个小项目的接口自动化测试
一.接口项目
项目来源于我自学老师自建的一系列接口,名为LJtest。这一系列接口组建成了一个小型的系统,主要功能类似于朋友圈/QQ空间发动态之类的。

如图,查看版本号接口,获取灵感,获取灵感详情这三个接口不需要登录。而用户发表灵感,修改灵感和删除灵感接口则需要登录后进行操作。剩余两个接口则是注册和登录接口。
二.接口用例设计和测试
接口文档提供了8个接口,这里我以其中两个接口作为示例来讲解如何进行这些接口的测试。
接口一:查看版本号接口
接口文档如图:

直接展示代码:
import unittest
import requests
import HTMLTestRunner
headers={"Content-Type":"application/json"}
class Test_showversion(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_1(self):
url = 'http://192.144.148.91:2333/showversion'
response = requests.get(url,headers = headers).json()
self.assertEqual(response['status'], 200)
if __name__ == '__main__':
testunit = unittest.TestSuite() #初始化测试用例集合对象,构建测试套件
testunit.addTest(Test_showversion("test_1")) #把测试用例加入到测试用力集合中去,将用例加入到检测套件中
filename = './' +'查看版本号'+'result.html'#重构文件名
fp = open(filename,'wb')#定义测试报告存放路径
runner = HTMLTestRunner.HTMLTestRunner(stream=fp)#定义测试报告
runner.run(testunit)
fp.close()
代码逻辑:1.导包 2.定制请求头 3.定义一个类集成unittest.TestCase 4.定义测试用例,url,请求方式,请求头非常简单明了。 5.断言,接口文档中返回值里'status'=200
,断言我们判断这个值是不是等于200就行了。最后生成一个非常简易的测试报告。

OK,这个接口非常简单。查询要么成功要么失败,这里不需要传入参数且接口已经被LJ老师更新好了无法设计更多测试用例。
接口二:登录接口
登录接口的接口文档如下:

为登录接口设计测试用例:8条用例只有第1条能够登录成功,其他7条应该都会报错。

源码:
import requests
import unittest
from ddt import ddt,data,unpack
headers={"Content-Type":"application/json"}
@ddt
class Test_login(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@data({"username":"8482592", "password":"a1234567"},{"username":"8482", "password":"a1234567"},{"username":"8482592123455", "password":"a1234567"}
,{"username":"84825921", "password":"a1234567"},{"username":"8482592", "password":"a123456"},{"username":"8482592", "password":"a1234567890123456"}
,{"username":"848259211", "password":"a1234567"},{"username":"8482592", "password":"a12345678"})
def test_1(self,usefinfo):
url = 'http://192.144.148.91:2333/login'
response = requests.post(url,headers = headers,json=usefinfo).json()
self.assertEqual(response['msg'], '登录成功!')
if __name__ == "__main__":
unittest.main(verbosity=2)
跑一遍显示的结果如下:

和我们的预期结果相符合,只有第1条用例师OK的,其他用例全部失败(error4条,fail3条)
目前还没有把ddt数据驱动和测试报告结合起来,下去研究下ddt测试用例的名称怎么修改,这样就能产出测试报告了。
2020.8.14傍晚更新
使用了pytest框架来运行unittest框架写好的测试用例,完全不冲突。生成了详细的测试报告,与期望的1pass7fail结果吻合。报告里面也有每一条测试用例出错的detial。感觉pytest确实要比unittest好用,还需要继续学习。


浙公网安备 33010602011771号