Python+Unittest接口自动化测试(二)---Unittest框架的使用
一、
安装Python的时候,就默认安装了Unittest,所以直接import使用就可以
1. Unittest初体验
# -*-coding:UTF:8-*- import unittest class TestMethod(unittest.TestCase): #每次方法之前执行 def setUp(self): print('test-->setup') #每次方法之后执行 def tearDown(self): print('test---->tearDown') def test_001(self): # unittest中的用例必须以test开头 print('这个是第一个测试方法') def test_002(self): print('这个是第二个测试方法') if __name__ == '__main__': unittest.main()
运行结果:
2. 加入类方法
类方法是整个测试只执行一遍
# -*-coding:UTF:8-*- import unittest class TestMethod(unittest.TestCase): @classmethod def setUpClass(cls): #类方法,整个测试只会执行一次 print("类执行之前的方法") @classmethod def tearDownClass(cls): print("类执行之后的方法") #每次方法之前执行 def setUp(self): print('test-->setup') #每次方法之后执行 def tearDown(self): print('test---->tearDown') def test_001(self): print('这个是第一个测试方法') def test_002(self): print('这个是第二个测试方法') if __name__ == '__main__': unittest.main()
运行结果:
二、实际应用
1. 把Setup()运用在实际测试中
#coding:utf-8 import unittest from TestDemo_No_init import RunMain import json class TestMethod(unittest.TestCase): def setUp(self): self.run = RunMain() def test01(self): url = 'http://127.0.0.1:8000/login/' data = { 'username': 'Jessie', 'password': '123456' } r = self.run.run_main(url, 'POST', data) print(r) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) print(re) def test02(self): url = 'http://fanyi.youdao.com/translate' data = { 'doctype': 'json', 'type': 'AUTO', 'i': 'weather' } r = self.run.run_main(url, 'GET', data) print(r) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) print(re) @unittest.skip('test03') # 跳过test03 def test03(self): url = 'http://fanyi.youdao.com/translate' data = { 'doctype': 'json', 'type': 'AUTO', 'i': '天气' } r = self.run.run_main(url, 'GET', data) print(r) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) if __name__ == '__main__': unittest.main()
运行结果:
可以对比下有json.loads()转化后,输出的格式,更容易查看了
2. 加入结果比对验证
assertEqual() 来检查预期的输出。具体为:比较第一个参数值和第二个参数值,如果相等则通过。如果不相等,则输出第三个参数的信息
assertTrue() 或 assertFalse() 来验证一个条件
assertRaises() 来验证抛出了一个特定的异常
#coding:utf-8 import unittest from TestDemo_No_init import RunMain import json class TestMethod(unittest.TestCase): def setUp(self): self.run = RunMain() def test01(self): """这是一个POST的接口自动化测试""" url = 'http://127.0.0.1:8000/login/' data = { 'username': 'Jessie', 'password': '123456' } r = self.run.run_main(url, 'POST', data) # print(r) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) print(re) re_new = json.loads(re) self.assertEqual(re_new['user'], 'Jessie', '测试失败') # globals()['userid'] = 66666 def test02(self): """查询翻译词的接口""" # print(userid) url = 'http://fanyi.youdao.com/translate' data = { 'doctype': 'json', 'type': 'AUTO', 'i': 'weather' } r = self.run.run_main(url, 'GET', data) # print(r) # print(type(r)) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) print(re) # print(type(re)) re_new = json.loads(re) # print(type(re_new)) self.assertEqual(re_new['errorCode'], 0, '测试失败') #检查预期结果 @unittest.skip('test03') # 跳过test03 def test03(self): url = 'http://fanyi.youdao.com/translate' data = { 'doctype': 'json', 'type': 'AUTO', 'i': '天气' } r = self.run.run_main(url, 'GET', data) print(r) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) re_new = json.loads(re) self.assertEqual(re_new['errorCode'], 0, '测试失败') #检查预期结果 if __name__ == '__main__': unittest.main()
运行结果:
如果把test02的这个地方改一下,故意制造个错误
看下运行结果:
打印的提示信息非常明显了
三、 case的管理运用
1.
#coding:utf-8 import unittest from TestDemo_No_init import RunMain import json class TestMethod(unittest.TestCase): def setUp(self): self.run = RunMain() def test01(self): url = 'http://127.0.0.1:8000/login/' data = { 'username': 'Jessie', 'password': '123456' } r = self.run.run_main(url, 'POST', data) print(r) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) re_new = json.loads(re) self.assertEqual(re_new['user'], 'Jessie', '测试失败') # globals()['userid'] = 66666 #全局变量 def test02(self): # print(userid) url = 'http://fanyi.youdao.com/translate' data = { 'doctype': 'json', 'type': 'AUTO', 'i': 'weather' } r = self.run.run_main(url, 'GET', data) print(r) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) re_new = json.loads(re) self.assertEqual(re_new['errorCode'], 0, '测试失败') @unittest.skip('test03') # 跳过test03 def test03(self): url = 'http://fanyi.youdao.com/translate' data = { 'doctype': 'json', 'type': 'AUTO', 'i': '天气' } r = self.run.run_main(url, 'GET', data) print(r) re = json.dumps(r, indent=2, sort_keys=False, ensure_ascii=False) re_new = json.loads(re) self.assertEqual(re_new['errorCode'], 0, '测试失败') if __name__ == '__main__': suite = unittest.TestSuite() #创建放case的容器 suite.addTest(TestMethod('test01')) #添加case suite.addTest(TestMethod('test02')) suite.addTest(TestMethod('test03')) runner = unittest.TextTestRunner() runner.run(suite)
运行结果:
IN A WORLD LIKE THIS
萬物之中,希望至美;至美之物,永不凋零