这次写的是unittest模块的测试用例,属于自动化的门槛,进去了基本算自动化入了门,测试内容很简单,模拟给url推送用户名、密码测试登录功能
先上代码:
#login_test.py import requests class Login(): def test_login(self,username,password): url = "http://localhost:8080/login" user_pwd = {} user_pwd["mobilephone"] = username user_pwd["pwd"] = password result = requests.get(url, params=user_pwd) list = (result.text).split(",") return list[3].split(":")[1].split("}")[0] if __name__ == '__main__': result = Login() Return = result.test_login("18688773461","123456") print(Return)
#test_case.py from login_test import Login from ddt import ddt,unpack,data from openpyxl import load_workbook import unittest @ddt class Run_Test(unittest.TestCase):#继承unittest.TestCase """ 读取excel文件和cfg文件中数据 :param xlsx: :param ws: :return: """ wb = load_workbook("login_data.xlsx") ws = wb.get_sheet_by_name("Sheet1") list = [] list1 = [] for i in range(1, ws.max_row + 1): list = [] for j in range(1, ws.max_column + 1): str = ws.cell(i, j).value list.append(str) list1.append(list) wb.close() @data(*list1) @unpack def test_run1(self,Username,Password,Text): self.Result = Login() Return = self.Result.test_login(Username,Password) self.assertEqual(eval(Return),Text) #测试用例 if __name__ == '__main__': unittest.main()
#run_test.py import unittest,HTMLTestRunnerNew import test_case class runtest(): def run_test_1(self): # 创建测试套件 suite = unittest.TestSuite() # 找到目录下所有的以test开头的Python文件里面的测试用例 all_test = unittest.defaultTestLoader.discover('.','test_*.py') # 把所有的测试用例添加进来 for i in all_test: suite.addTests(i) # 打开一个保存结果的html文件 fp = open('res_1.html','wb') # 生成执行用例的对象 runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp,title='2019年3月23日作业_测试报告',description='所有测试情况',tester = "桂马") # 执行测试套件 runner.run(suite) def run_test_2(self): # 创建测试套件 suite = unittest.TestSuite() # 测试套件中添加测试用例 loader = unittest.TestLoader() suite.addTests(loader.loadTestsFromTestCase(test_case.Run_Test)) # 打开一个保存结果的html文件 fp = open('res_2.html', 'wb') # 生成执行用例的对象 runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年3月23日作业_测试报告', description='所有测试情况',tester = "桂马") # 执行测试套件 runner.run(suite) def run_test_3(self): # 创建测试套件 suite = unittest.TestSuite() # 测试套件中添加测试模块 loader = unittest.TestLoader() suite.addTests(loader.loadTestsFromModule(test_case)) # 打开一个保存结果的html文件 fp = open('res_3.html', 'wb') # 生成执行用例的对象 runner = HTMLTestRunnerNew.HTMLTestRunner(stream=fp, title='2019年3月23日作业_测试报告', description='所有测试情况',tester = "桂马") # 执行测试套件 runner.run(suite) if __name__ == '__main__': homework = runtest() homework.run_test_1() homework.run_test_2() homework.run_test_3()
xlsx文件内容如下图:
注意点:
1.为了提高代码的可重复利用性,所以最好功能、用例、运行报告分开写,这点最好养成习惯,很重要
2.模块的命名,为什么要说这个呢,因为这回我在这上面卡了40多分钟,硬是找不到错误,test_case运行一切顺利,但是run_test就是报错,找了半天,最后改了模块名才发现通过了。血的教训,所以一定要记住
3.功能未做注释是因为比较简单,最后的返回值只不过是二度切割,把返回结果的value切出来而已,也可以不切,断言换成self.assertIn()来做,不过那样不够准确,所以不太推荐
4.用例添加进测试套件的方法不止我写的这三种,只不过这三种写起来比较简单,更多的网上也有,这里只是做一个参考和笔记
5.原本test_case中还有setUp()、tearDown()方法,self.Result = Login()也是写在setUp()中的,但是老报错,时间又不够我排查,索性不写了,直接丢case中
6.最后的创建套件并运行也可以不生成报告,报告不是必要的,只是顺手写上去的,也可以直接TextTestRunner运行完毕直接查看控制台
7.果然代码还是要常码,unittest模块以前还是很熟练的,有段时间没碰,写起来就磕磕碰碰的了
备注:
2019年3月24日更新代码,使用openpyxl、ddt模块优化test_case模块,使用修改后的HTMLTestRunner模块HTMLTestRunnerNew来美化测试报告页面