unittest管理接口用例
1.unittest框架
- 简单套入 unittest 框架
import requests import unittest class TestApi(unittest.TestCase): def setUp(self): self.apiurl = "http://www.xxxxx.com/customer/login.html" self.header = {"Cookie": "mediav=%7B%22eid%22%3A%22470884%22%2C%22ep%22%3A%22%22%2C%22vid%22%3A%22%40-vC_Waqh_%3AU%234K75o%5B!%22%2C%22ctn%22%3A%22%22%7D"} self.timeout = 1 def testlogin01(self): body = {"loginName":17779828888,"loginPwd":"zy123456"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["values"]["loginName"] == "17779828888": pass else: raise ValueError def testlogin02(self): body = {"loginName":17779828881,"loginPwd":"123456"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["errorMsg"] == u"用户或者密码错误": pass else: raise ValueError def testlogin03(self): body = {"loginName":17779828888,"loginPwd":"123443"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["errorMsg"] == u"用户或者密码错误": pass else: raise ValueError def testlogin04(self): body = {"loginName":"","loginPwd":"123443"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["errorMsg"] == u"用户名不能为空": pass else: raise ValueError def testlogin05(self): body = {"loginName":17779828888,"loginPwd":""} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["errorMsg"] == u"用户密码不能为空": pass else: raise ValueError if __name__ == '__main__': unttest.main()
- 在 @classmethod 装饰器中获取令牌校验信息
import requests import unittest class ZSGX(unittest.TestCase): @classmethod def setUpClass(cls) -> None: """ 通过登录接口获取令牌JWT和用户uid,给到用例中的接口进行校验 """ print("Test start...") cls.url = "https://apipc.xinqgj.com/user/login" cls.headers = {"Content-Type": "application/json", "YF-BID": "zwy", "YF-JWT": "", "YF-UID": "", "YF-VER": "1.0.0"} cls.payload = {"phone": "17779828887", "pwd": "GoKVE/vkgkmEyLIKeIAltopt9tx14BJ0dtEirmHm3iPMjDivvZBJHcZdqOWS7mqKXODJugJ+gFT7x/FCvUcpv1py7Vxeghu+r+u9I0dJT1xSAp5co7EIh2PS8bZog/k8AIsIXNIMnAgp68jke64Qz9nR9cOJix1wvmOTJMWnxu4xxxx=", "validateCode": "m4ld", "encryptStr": "fdff60cf95e0eb8c78f6bb9e5cc0e208"} cls.res = requests.request("post", cls.url, headers=cls.headers, json=cls.payload) cls.JWT = cls.res.json().get("data").get("JWT") cls.uid = cls.res.json().get("data").get("user").get("uid") @classmethod def tearDownClass(cls) -> None: print("Test end...") def setUp(self) -> None: self.headers = {"Content-Type": "application/json", "YF-BID": "zwy", "YF-JWT": self.JWT, "YF-UID": str(self.uid), "YF-VER": "1.0.0"} def tearDown(self) -> None: pass def test_DelegateRecord01(self): """ 委托记录接口,检查所有的记录 """ self.url = "https://apipc.xinqgj.com/match/users/102299/coins/trusts/record?page=0&size=10&status=-1&beginTime=&endTime=&coin=" res = requests.request("get",self.url,headers=self.headers) total = res.json().get("data").get("page").get("total") self.assertEqual(total,119,msg="DelegateRecord01 is error") def test_DelegateRecord02(self): """ 检查YXT的委托记录 """ self.url = "https://apipc.xinqgj.com/match/users/102299/coins/trusts/record?page=0&size=10&status=-1&beginTime=&endTime=&coin=YXT" res = requests.request("get",self.url,headers=self.headers) total = res.json().get("data").get("page").get("total") self.assertEqual(total,90,msg="DelegateRecord02 is error") def test_DelegateRecord03(self): """ 检查WLT的委托记录 """ self.url = "https://apipc.xinqgj.com/match/users/102299/coins/trusts/record?page=0&size=10&status=-1&beginTime=&endTime=&coin=WLT" res = requests.request("get",self.url,headers=self.headers) total = res.json().get("data").get("page").get("total") self.assertEqual(total,6,msg="DelegateRecord03 is error") if __name__ == '__main__': unittest.main()
- 在 @classmethod 装饰器中获取 session 会话状态
import requests import unittest class Cms(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.session = requests.Session() # 通过 session 保持会话 print("... Start test ...") @classmethod def tearDownClass(cls) -> None: print("... End test ...") def testlogin(self): self.url = "http://192.168.1.110:8080/cms/manage/loginJump.do" self.header = {"Content-Type": "application/x-www-form-urlencoded"} self.parmas = {"userAccount": "admin", "loginPwd": "123456"} #通过全局 session 请求接口 res = self.session.post(self.url, headers=self.header, data=self.parmas) self.assertEqual(res.json()["msg"],"登录成功!",msg="testlogin error!") def testqueryUserList(self): self.url = "http://192.168.1.110:8080/cms/manage/queryUserList.do" self.header = {"Content-Type": "application/x-www-form-urlencoded"} self.parmas = {"startCreateDate":"", "endCreateDate":"", "searchValue":"", "page":"1"} # 通过全局 session 请求接口 res = self.session.post(self.url, headers=self.header, data=self.parmas) self.assertEqual(res.json()["msg"],"查询用户成功!",msg="testqueryUserList error!") if __name__ == '__main__': unittest.main()
2.生成测试报告
import requests import unittest import HTMLTestRunner class TestApi(unittest.TestCase): def setUp(self): self.apiurl = "http://www.xxxxx.com/customer/login.html" self.header = {"Cookie": "mediav=%7B%22eid%22%3A%22470884%22%2C%22ep%22%3A%22%22%2C%22vid%22%3A%22%40-vC_Waqh_%3AU%234K75o%5B!%22%2C%22ctn%22%3A%22%22%7D"} self.timeout = 1 def testlogin01(self): body = {"loginName":17779828888,"loginPwd":"zy123456"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["values"]["loginName"] == "17779828888": pass else: raise ValueError def testlogin02(self): body = {"loginName":17779828881,"loginPwd":"123456"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["errorMsg"] == u"用户或者密码错误": pass else: raise ValueError def testlogin03(self): body = {"loginName":17779828888,"loginPwd":"123443"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["errorMsg"] == u"用户或者密码错误": pass else: raise ValueError def testlogin04(self): body = {"loginName":"","loginPwd":"123443"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["errorMsg"] == u"用户名不能为空": pass else: raise ValueError def testlogin05(self): body = {"loginName":17779828888,"loginPwd":""} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) if response.json()["errorMsg"] == u"用户密码不能为空": pass else: raise ValueError if __name__ == '__main__': suit = unittest.TestSuite() testcases = [TestApi("testlogin01"),TestApi("testlogin02"),TestApi("testlogin03"), TestApi("testlogin04"),TestApi("testlogin05")] suit.addTests(testcases) dir = "D:\\testapi.html" path = open(dir,"wb") runner = HTMLTestRunner.HTMLTestRunner(stream=path,title="TestReport",description="TestDesc") runner.run(suit) path.close()
3.断言
- if ... else ... 如上代码
- try ... except ...
import requests import unittest class TestApi(unittest.TestCase): def setUp(self): self.apiurl = "http://www.xxxx.com/customer/login.html" self.header = {"Cookie": "mediav=%7B%22eid%22%3A%22470884%22%2C%22ep%22%3A%22%22%2C%22vid%22%3A%22%40-vC_Waqh_%3AU%234K75o%5B!%22%2C%22ctn%22%3A%22%22%7D"} self.timeout = 1 def testlogin01(self): body = {"loginName":17779828888,"loginPwd":"zy295240???"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) try: result = response.json()["values"]["loginName"] if result == "17779828888": pass else: raise ValueError except: print ("testlogin01 error!") else: print ("testlogin01 ok!") if __name__ == '__main__': unittest.main()
- unttest 中 assert断言方式
import requests import unittestclass TestApi(unittest.TestCase): def setUp(self): self.apiurl = "http://www.xxxx.com/customer/login.html" self.header = {"Cookie": "mediav=%7B%22eid%22%3A%22470884%22%2C%22ep%22%3A%22%22%2C%22vid%22%3A%22%40-vC_Waqh_%3AU%234K75o%5B!%22%2C%22ctn%22%3A%22%22%7D; "} self.timeout = 1 def testlogin01(self): body = {"loginName":17779828888,"loginPwd":"zy123456"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) phone = response.json()["values"]["loginName"] self.assertEqual(phone,"17779828888",msg="testlogin01 error!") def testlogin02(self): body = {"loginName":17779828881,"loginPwd":"zy123456"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) errorMsg = response.json()["errorMsg"] self.assertNotEqual(errorMsg,u"成功",msg="testlogin02 error!") def testlogin03(self): body = {"loginName":17779828888,"loginPwd":"123443"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) errorMsg = response.json()["errorMsg"] self.assertIn(u"密码错误",errorMsg,msg="testlogin03 error!") def testlogin04(self): body = {"loginName":"","loginPwd":"123443"} response = requests.post(url=self.apiurl,data=body,headers=self.header,timeout=self.timeout) errorMsg = response.json()["errorMsg"] self.assertNotIn(u"密码错误",errorMsg,msg="testlogin04 error!") if __name__ == '__main__': unittest.main()
作者:一个老宅男
微信:ZhengYing8887
出处:https://www.cnblogs.com/ZhengYing0813/
备注:本文版权归作者所有,欢迎转载和添加作者微信探讨技术,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。