博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python+Excel+Unittest+HTMLTestRunner实现数据驱动接口自动化测试(一)
阅读量:6429 次
发布时间:2019-06-23

本文共 3006 字,大约阅读时间需要 10 分钟。

整个流程:

使用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, syssys.path.append('./testcase')sys.path.append('./common')from HTMLTestRunner import HTMLTestRunnerfrom 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 datalistdef 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方法,循环测试数据。这样写用例更简单,目前在想是从报告中处理,还是测试用例读取部分进行处理。

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

 

转载于:https://www.cnblogs.com/Sandy-1128/p/appium-python-sandy-0314-1.html

你可能感兴趣的文章
后台post注入爆密码
查看>>
Java --- 多线程 面试题
查看>>
OA项目如何成功实施!
查看>>
FindMaxConsecutive.java
查看>>
nfs服务器的配置以及fstab参数描述
查看>>
《跟阿铭学linux》(第3版)笔记
查看>>
MySQL自动化运维之用mysqldump和mysqlbinlog实现某一数据库的每周全备和每天差异备...
查看>>
作业:图书管理
查看>>
解决在安装gulp的时候遇到的问题
查看>>
【原创】Git版本控制器的基本使用
查看>>
图说:Windows 8密码:图片密码
查看>>
10.1综合强化刷题 Day5
查看>>
php批量导入带有图片的Excel表格
查看>>
我的友情链接
查看>>
webmin的安装与管理
查看>>
zabbix unreachable poller processes more than 75 busy
查看>>
centos 6.0 修改本地光盘作为yum源 使用更新的国内镜像源
查看>>
DNS 服务相关概念 (一)
查看>>
我的友情链接
查看>>
LNMP环境搭建
查看>>