整个流程:

使用HTMLTestRunner的Run方法执行用例,用例调用Excel读取方法,将测试数据导入到unittest用例中执行,测试结果返回给HTMLTestRunner。

因为刚接触接口自动化,写的比较简单。后面也会考虑加一个请求类型的封装,excel测试数据也会增加一些字段(如用例是否运行,是否带Headers、cookie,

case依赖,关联数据库,增加日志,定制化HTML,测试结果自动发送邮件等),搞完后再分享出来。

整个目录结构:

---common 存放公共库

---testcase

---testdata 存放excel测试数据

---testreport 存放测试报告

---Run_tests 启动测试

1. Run_tests.py

使用discover方法构造测试集,用HTMLTestRunner的run()方法启动测试集并生成测试报告。

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名返回测试数据的列表集合。

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测试,对测试结果进行断言

    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方法,循环测试数据。这样写用例更简单,目前在想是从报告中处理,还是测试用例读取部分进行处理。

有想法欢迎给我留言,谢谢。

 

最新文章

  1. 【Python实战】机型自动化标注(搜狗爬虫实现)
  2. 【BZOJ-2460&3105】元素&新Nim游戏 动态维护线性基 + 贪心
  3. c#基础系列(转)
  4. SCCM 2007日志
  5. 双系统下利用MbrFix.exe卸载LINUX系统
  6. 为什么Nhibernate中属性和方法必须Virtual的
  7. JMS & ActiveMQ小结
  8. NumPy入门及基础
  9. Python 操作 GA API 指南
  10. (一〇一)集成静态库RHAddressBook实现OC访问通讯录
  11. busybox(二)编译
  12. vue移动端金融UI组件库滴滴MandMobile面向金融场景设计附功能思维导图
  13. 【原创】【Android】揭秘 ART 细节 ---- Garbage collection
  14. non-member function cannot have cv-qualifier
  15. Nginx 403 forbidden多种原因及故障模拟重现
  16. FXML Stuffs (include and define)
  17. 剑指offer-调整数组内奇偶数顺序
  18. 牛客练习赛32-D-MST+tarjin割边
  19. delphi 游戏
  20. (原创)c++11改进我们的程序之垃圾回收

热门文章

  1. 使用 C++ REST SDK 进行网络编程
  2. MySQL 8.0 新增SQL语法对窗口函数和CTE的支持
  3. c++冒号作用
  4. azkaban 配置邮件
  5. Nginx – rewrite 配置 URL重写及301跳转原理图
  6. VS打开SSAS或SSIS报错的解决办法
  7. 根据需要查找需要的第三方pyhton库
  8. 震惊!90%的程序员不知道的Java知识!
  9. python04 列表 元祖 字典
  10. Python3实战系列之七(获取印度售后数据项目)