发布于2019-08-08 16:49 阅读(199) 评论(0) 点赞(4) 收藏(0)
整个流程:
使用HTMLTestRunner的Run方法执行用例,用例调用Excel读取方法,将测试数据导入到unittest用例中执行,测试结果返回给HTMLTestRunner。
因为刚接触接口自动化,写的比较简单。后面也会考虑加一个请求类型的封装,excel测试数据也会增加一些字段(如用例是否运行,是否带Headers、cookie,
case依赖,关联数据库,增加日志,定制化HTML,测试结果自动发送邮件等),搞完后再分享出来。
整个目录结构:
---common 存放公共库
---testcase
---testdata 存放excel测试数据
---testreport 存放测试报告
---Run_tests 启动测试
1. Run_tests.py
使用discover方法构造测试集,用HTMLTestRunner的run()方法启动测试集并生成测试报告。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import time, sys sys.path.append( './testcase' ) sys.path.append( './common' ) from HTMLTestRunner import HTMLTestRunner from unittest import defaultTestLoader # 指定测试用例为当前文件夹下的 testcase 目录 test_dir = './testcase' testsuit = defaultTestLoader.discover(test_dir, pattern = '*_test.py' ) if __name__ = = "__main__" : now = time.strftime( "%Y-%m-%d %H_%M_%S" ) filename = './testreport/' + now + '_result.html' fp = open (filename, 'wb' ) runner = HTMLTestRunner(stream = fp, title = 'System Interface Auto Test Report' , description = 'Test Result' ) runner.run(testsuit) fp.close() |
2. 测试Excel档如下:
使用公共库中的OperateExcel方法读取,通过excel名和sheet名返回测试数据的列表集合。
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 | def Readexcelrow_of_sheet(filename,sheet_name,row): '''返回某个sheet中某一行数据的列表''' folder = "C:\\Users\\LENOVO\\PycharmProjects\\Apiautotest-master\\testdata\\" fullfilename = folder + filename rb = xlrd.open_workbook(fullfilename) sheet = rb.sheet_by_name(sheet_name) datalist = [] for i in range ( 8 ): try : data = sheet.cell_value(row,i) datalist.append(data) except TypeError as f: break #print (datalist) return datalist def Readexcelalldata_of_sheet(filename,sheet_name): '''返回整个sheet的内容的列表''' datalistlist = [] for i in range ( 1 , 100 ): try : data = Readexcelrow_of_sheet(filename,sheet_name,i) datalistlist.append(data) except IndexError as e: break return datalistlist |
3. testcase调用该方法读取测试数据后,取出测试数据循环进行request测试,对测试结果进行断言
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | def test_login( self ): self .testcasecount = len ( self .testcaseinfo) for i in range ( len ( self .testcaseinfo)): data = self .testcaseinfo[i] #print (data) url = data[ 3 ] payload = data[ 4 ].encode( 'utf-8' ) expectedcode = data[ 5 ] expectedmsg = data[ 6 ] expecteddata = data[ 7 ] headers = { "Content-Type" : "application/json" } r = requests.post(url,data = payload,headers = headers) self .result = r.json() self .assertEqual( self .result[ 'code' ], expectedcode,msg = "code断言失败" ) self .assertEqual( self .result[ 'msg' ], expectedmsg,msg = "msg断言失败" ) if expecteddata ! = "": print ( "检查data字段" ) self .assertEqual( str ( self .result[ 'data' ]), expecteddata,msg = "data断言失败" ) |
4.测试完成后生成测试报告,报告中可以体现出测试异常的原因。
目前还有个问题:
unittest中实际运行了一个借口的很多条用例,而报告中只会有一条记录。这是因为unittest test case中我只写了一个test方法,循环测试数据。这样写用例更简单,目前在想是从报告中处理,还是测试用例读取部分进行处理。
有想法欢迎给我留言,谢谢。
作者:可以给我吃一口吗
链接:https://www.pythonheidong.com/blog/article/15366/f0b161baf4c7d67eeb4c/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!