unittest模块小结
这次写的是unittest模块的测试用例,属于自动化的门槛,进去了基本算自动化入了门,测试内容很简单,模拟给url推送用户名、密码测试登录功能
先上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #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) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #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() |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | #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来美化测试报告页面
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧