python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码
python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://files.cnblogs.com/files/zw520ly/Python3.rar
测试类1:
# coding=UTF-8
import unittest
import os
import configparser
from Lib.ReaderFile import ReaderFile
from Lib.SendRepuest import SendRequest class RyTest(unittest.TestCase):
"""
在被测试的类中,这三个属性是固定的:
classNmae(一般与当前类名相同,用作测试报告的名称)
title(测试报告的主标题)
description(对整个被测试类测试流程的描述)
"""
className = 'RyTest';
title = '容易网大运营后台测试集';
description = '主要测试流程为金融事业部支付流程' def setUp(self):
#构造excel的文件读取对象
self.excelData = ReaderFile();
#构造发送http请求的client对象
self.ryLogin = SendRequest();
#当前工程的路径
self.parentPath = os.path.dirname(os.getcwd());
#构造配置文件的读取对象
self.config = configparser.ConfigParser()
#读取配置文件内容
self.config.read(self.parentPath + '/DataFile/config.conf');
print('数据初始化完成!!!') def tearDown(self):
print('测试完成!!!') """
大运营后台登录
""" def testLogin(self):
# 声明全局变量cookie,供后面的case调用
global cookie;
# 从excel获取参数
dataList = self.excelData.getExcelValue(self.parentPath + '/DataFile/Rytest.xlsx', 'ryLogin');
#配置文件中读取host及url信息
url = self.config.get('host', 'ry_host') + self.config.get('url', 'login_url');
for item in range(0, len(dataList)):
#获取excel参数
data = dataList[item]['paramer'];
headers = eval(dataList[item]['headers']);
cookieKey = dataList[item]['cookieKey'];
# 发送请求并获取cookie
cookie = self.ryLogin.GetCookie(url, data, headers, cookieKey)
print(cookie); """
大运营后台更新交易通道状态
""" def testUpdate(self):
# 从excel获取参数
dataList = self.excelData.getExcelValue(self.parentPath + '/DataFile/Rytest.xlsx', 'ryUpdate');
# 配置文件中读取host及url信息
url = self.config.get('host','ryfe_host')+self.config.get('url','updateChannelStatus_url');
for item in range(0, len(dataList)):
# 获取excel参数
data = dataList[item]['paramer'];
headers = eval(dataList[item]['headers']);
expectedResult = dataList[item]['expectedResult'];
# 发送请求并获取返回结果
response = self.ryLogin.doPost(url, data, headers, cookie);
print('请求参数:' + data)
print('期望结果:' + expectedResult)
print("实际返回结果:" + response)
print('对比结果:' + str(expectedResult == response)) 测试类2:
# coding=UTF-8
import unittest
import os from Lib.ReaderFile import ReaderFile class TestReaderFile(unittest.TestCase):
"""
在被测试的类中,这三个属性是固定的:
classNmae(一般与当前类名相同,用作测试报告的名称)
title(测试报告的主标题)
description(对整个被测试类测试流程的描述)
"""
className = 'TestReaderFile'
title = '文件读取测试流程'
description = '主要测试csv文件和excel文件的读取' # 初始化参数,从csv文件中读取数据,返回的是list[dict],testcase调用
def setUp(self):
# 构造文件读取器对象
self.reader = ReaderFile();
# 获取当前.py文件的上级目录
self.dataFile = os.path.dirname(os.getcwd())
print('测试数据初始化完成!!!') def tearDown(self):
print('测试结束!!!') def testReadCsvFile(self):
# 获取csv文件的数据,值为dict类型的list
csvList = self.reader.getCsvValue(self.dataFile + '/DataFile/csvData.csv');
# 遍历list中的所有dict,进行逻辑覆盖
for item in range(0, len(csvList)):
# 获取csv数据源中的某列
csvDict = csvList[item];
# 将csv参数初始化dict对象
prama = dict(name=csvDict['name'], age=csvDict['age'], sex=csvDict['sex']);
# 将csv文件中的期望结果中的";"替换成","
expectedStr = csvDict['expectedResult'].replace(';', ',');
# 将形如dict的字符串转换成dict
expectedDict = eval(expectedStr);
print('请求参数:' + str(prama));
print('期望结果:' + str(expectedStr))
# 对比期望结果与实际结果
print('对比结果:' + str(prama == expectedDict)); def testReadExcelFile(self):
# 获取excel文件sheet名称为'表格一'的全部内容,值为dict类型的list
excelList = self.reader.getExcelValue(self.dataFile + '/DataFile/excelFile.xlsx', '表格一');
# 遍历list中的所有dict,进行逻辑覆盖
for item in range(0, len(excelList)):
excelDict = excelList[item];
name = excelDict['name'];
age = excelDict['age'];
sex = excelDict['sex'];
expectedStr = eval(excelDict['expectedResult']);
prama = dict(name=name, age=age, sex=sex);
print('请求参数:' + str(prama))
print('期望结果:' + str(expectedStr))
# 对比期望结果与实际结果
print('对比结果:' + str(prama == expectedStr)); 测试入口封装类:
import HTMLTestRunner
import unittest
import os class HtmlReport:
"""
使用HTMLTestRunner+unittest去执行testcase并生成相应的HTML页面的测试报告
""" def reportTemple(self, classList):
# 遍历testCase(被测试类)的list集,一次执行多个testCase
for item in range(0, len(classList)):
#要执行的testCase
suite = unittest.makeSuite(classList[item]);
# 测试报告名称
filename = os.path.dirname(os.getcwd()) + '/Report/' + classList[item].className + '.html';
#向测试报告中写入测试结果
fp = open(filename, 'wb');
#运行testCase
runner = HTMLTestRunner.HTMLTestRunner(fp, title=classList[item].title,
description=classList[item].description);
runner.run(suite); 实际测试入口:
from Lib.HtmlReport import HtmlReport
from Service.RyTest import RyTest
from Service.TestReaderFile import TestReaderFile """
testCase的入口,调用htmlReport类下的reportTemple方法,传入被测试的test类的list即可,支持多个测试类测试,并生成与之对应的测试报告
"""
if __name__ == '__main__':
classList = [RyTest, TestReaderFile];
htmlReport = HtmlReport();
htmlReport.reportTemple(classList);
python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码的更多相关文章
- python+request+HTMLTestRunner+unittest接口自动化测试框架
转自https://my.oschina.net/u/3041656/blog/820023 正在调研使用python进行自动化测试,在网上发现一篇比较好的博文,作者使用的是python3,但目前自己 ...
- Pycharm上python运行和unittest运行两种执行方式解析
前言 经常有人在群里反馈,明明代码一样的啊,为什么别人的能出报告,我的出不了报告,为什么别人运行结果跟我的不一样啊... 这种问题先检查代码,确定是一样的,那就是运行姿势不对了,一旦导入unittes ...
- python接口自动化测试二十五:执行所有用例,并生成HTML测试报告
import requestsimport unittest class TestQQ(unittest.TestCase): '''测试QQ号接口''' # 此注释将展示到测 ...
- unittest如何在循环遍历一条用例时生成多个测试结果
引用自:http://blog.csdn.net/kaku21/article/details/42124593 参考网址:http://programmaticallyspeaking.com/te ...
- Python调用ffpmeg和ffprobe处理视频文件
需求: 运营有若干批次的视频.有上千个,视频文件,有mp4格式的,有ts格式的 现在有需要去掉视频文件片头和片尾的批量操作需求. 比如 文件夹A下面的视频去掉片尾10秒 文件夹B下面的视频去掉片头6秒 ...
- python调用小豆机器人实现自己的机器人!
大家好,人工智能是不是很酷呢? 今天我们用python调用小豆机器人实现自己的机器人(可以结合往期的语音识别更酷哦) 好,废话不多说直接上代码 import requests i=input(&quo ...
- 第二个UI脚本--Python+selenium之unittest+HTMLtestRunner及python的继承
前面有一篇对于常见元素的识别和操作的python自动化脚本,这一篇就接着聊下python的类继承,已经它的第三款unittest框架,和报告收集包HTMLtestRunner的应用. 还是直接上代码吧 ...
- python基础===利用unittest进行测试用例执行的几种方式
利用python进行测试时,测试用例的加载方式有2种: 一种是通过unittest.main()来启动所需测试的测试模块: 一种是添加到testsuite集合中再加载所有的被测试对象,而tests ...
- Python单元测试框架unittest之生成测试报告(HTMLTestRunner)
前言 批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLT ...
随机推荐
- P2921 [USACO08DEC]在农场万圣节[SCC缩点]
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- Java8新特性--日期和时间API
如何正确处理时间 现实生活的世界里,时间是不断向前的,如果向前追溯时间的起点,可能是宇宙出生时,又或是是宇宙出现之前, 但肯定是我们目前无法找到的,我们不知道现在距离时间原点的精确距离.所以我们要表示 ...
- TeX Live安装指南
若要安装 TeXLive ,推荐下载 TeXLive 的 ISO 镜像,因为在线安装下载过程会很慢.如果网速快也可以在线安装.下载地址:http://mirror.ctan.org/systems/t ...
- Django中的日期和时间格式 DateTimeField
创建django的model时,有DateTimeField.DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime().date().time()三中对象 ...
- Vue Router 使用方法
安装 直接下载 / CDN https://unpkg.com/vue-router/dist/vue-router.js Unpkg.com 提供了基于 NPM 的 CDN 链接.上面的链接会一直指 ...
- C# 通过 参数返回 C++ 指针
参数返回 C++ 指针 C++ 代码 Extern_C BASECORELIBRARY_API char * GetFileByteArray(wchar_t * BinfilePath, wchar ...
- 学到了林海峰,武沛齐讲的Day30 完 TCP UDP
TCP UDP 其中讲了数据的传输.各有利弊 个人理解 就是这样将高并发,低数据,高数据的传输,稳定高效
- Yarn 配置阿里源
1.查看一下当前源 yarn config get registry 2.切换为淘宝源 yarn config set registry https://registry.npm.taobao.org ...
- DOM操作1
1.DOM文档对象模型:操作页面元素(标签) html文件看成一个文档,把文档看成一个对象 xml也是一种文档,标签自定义,系统不自带标签,偏向于存储数据 2.DOM树:由文档及文档中的所以元素(标签 ...
- loj3120 「CTS2019 | CTSC2019」珍珠
link .... 感觉自己太颓废了....还是来更题解吧...[话说写博客会不会涨 rp 啊 qaq ? 题意: 有 n 个物品,每个都有一个 [1,D] 中随机的颜色,相同颜色的两个物品可以配对. ...