1. python自动化框架雏形,根据自己需要封装:ui自动化,接口自动化均可适用,python版本为python3.x,不要问我为什么不用python2.x,附上整个project代码:http://files.cnblogs.com/files/zw520ly/Python3.rar

测试类1:

  1. # coding=UTF-8
    import unittest
    import os
    import configparser
    from Lib.ReaderFile import ReaderFile
    from Lib.SendRepuest import SendRequest
  2.  
  3. class RyTest(unittest.TestCase):
    """
    在被测试的类中,这三个属性是固定的:
    classNmae(一般与当前类名相同,用作测试报告的名称)
    title(测试报告的主标题)
    description(对整个被测试类测试流程的描述)
    """
    className = 'RyTest';
    title = '容易网大运营后台测试集';
    description = '主要测试流程为金融事业部支付流程'
  4.  
  5. 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('数据初始化完成!!!')
  6.  
  7. def tearDown(self):
    print('测试完成!!!')
  8.  
  9. """
    大运营后台登录
    """
  10.  
  11. 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);
  12.  
  13. """
    大运营后台更新交易通道状态
    """
  14.  
  15. 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))
  16.  
  17. 测试类2
  1. # coding=UTF-8
    import unittest
    import os
  2.  
  3. from Lib.ReaderFile import ReaderFile
  4.  
  5. class TestReaderFile(unittest.TestCase):
    """
    在被测试的类中,这三个属性是固定的:
    classNmae(一般与当前类名相同,用作测试报告的名称)
    title(测试报告的主标题)
    description(对整个被测试类测试流程的描述)
    """
    className = 'TestReaderFile'
    title = '文件读取测试流程'
    description = '主要测试csv文件和excel文件的读取'
  6.  
  7. # 初始化参数,从csv文件中读取数据,返回的是list[dict],testcase调用
    def setUp(self):
    # 构造文件读取器对象
    self.reader = ReaderFile();
    # 获取当前.py文件的上级目录
    self.dataFile = os.path.dirname(os.getcwd())
    print('测试数据初始化完成!!!')
  8.  
  9. def tearDown(self):
    print('测试结束!!!')
  10.  
  11. 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));
  12.  
  13. 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));
  14.  
  15. 测试入口封装类:
  1. import HTMLTestRunner
    import unittest
    import os
  2.  
  3. class HtmlReport:
    """
    使用HTMLTestRunner+unittest去执行testcase并生成相应的HTML页面的测试报告
    """
  4.  
  5. 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);
  6.  
  7. 实际测试入口:
  1. from Lib.HtmlReport import HtmlReport
    from Service.RyTest import RyTest
    from Service.TestReaderFile import TestReaderFile
  2.  
  3. """
    testCase的入口,调用htmlReport类下的reportTemple方法,传入被测试的test类的list即可,支持多个测试类测试,并生成与之对应的测试报告
    """
    if __name__ == '__main__':
    classList = [RyTest, TestReaderFile];
    htmlReport = HtmlReport();
    htmlReport.reportTemple(classList);
  1.  

python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,具体看代码,附上整个project代码的更多相关文章

  1. python+request+HTMLTestRunner+unittest接口自动化测试框架

    转自https://my.oschina.net/u/3041656/blog/820023 正在调研使用python进行自动化测试,在网上发现一篇比较好的博文,作者使用的是python3,但目前自己 ...

  2. Pycharm上python运行和unittest运行两种执行方式解析

    前言 经常有人在群里反馈,明明代码一样的啊,为什么别人的能出报告,我的出不了报告,为什么别人运行结果跟我的不一样啊... 这种问题先检查代码,确定是一样的,那就是运行姿势不对了,一旦导入unittes ...

  3. python接口自动化测试二十五:执行所有用例,并生成HTML测试报告

        import requestsimport unittest class TestQQ(unittest.TestCase):    '''测试QQ号接口'''      # 此注释将展示到测 ...

  4. unittest如何在循环遍历一条用例时生成多个测试结果

    引用自:http://blog.csdn.net/kaku21/article/details/42124593 参考网址:http://programmaticallyspeaking.com/te ...

  5. Python调用ffpmeg和ffprobe处理视频文件

    需求: 运营有若干批次的视频.有上千个,视频文件,有mp4格式的,有ts格式的 现在有需要去掉视频文件片头和片尾的批量操作需求. 比如 文件夹A下面的视频去掉片尾10秒 文件夹B下面的视频去掉片头6秒 ...

  6. python调用小豆机器人实现自己的机器人!

    大家好,人工智能是不是很酷呢? 今天我们用python调用小豆机器人实现自己的机器人(可以结合往期的语音识别更酷哦) 好,废话不多说直接上代码 import requests i=input(&quo ...

  7. 第二个UI脚本--Python+selenium之unittest+HTMLtestRunner及python的继承

    前面有一篇对于常见元素的识别和操作的python自动化脚本,这一篇就接着聊下python的类继承,已经它的第三款unittest框架,和报告收集包HTMLtestRunner的应用. 还是直接上代码吧 ...

  8. python基础===利用unittest进行测试用例执行的几种方式

    利用python进行测试时,测试用例的加载方式有2种:  一种是通过unittest.main()来启动所需测试的测试模块:  一种是添加到testsuite集合中再加载所有的被测试对象,而tests ...

  9. Python单元测试框架unittest之生成测试报告(HTMLTestRunner)

    前言 批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLT ...

随机推荐

  1. 【loj-1055-Going Together-三个棋子推箱子走到目的地--讲预判的bfs】

    light oj 1055-Going Together 题目大致意思: 简单的三个棋子,每次可以下达一个命令,robots全部按照指令进行前进:若下一步不为空地则停留在原地. 特殊考虑: 1.例如A ...

  2. linux systemd 从简单的例子入门

    linux systemd 从简单的例子入门 网上很多相关链接,一上来就给一大堆命令和讲解,让人头都大. 我们希望有一个service(服务),让它在开机启动的时候就执行. 用 root 登陆以后: ...

  3. webpack搭建组件库相关知识

    1 .inquirer.js —— 一个用户与命令行交互的工具 2. existsSync 方法说明: 以同步的方法检测目录是否存在. 如果目录存在 返回 true ,如果目录不存在 返回false语 ...

  4. Mac系统上,Firefox和Selenium不兼容的情况

    解决办法,检查环境: Python 2.7.10 Firefox 46版本 Selenium 2.53.6 注意:将Firefox自动更新关闭,否则可能会出现自动升级以后无法执行Selenium用例的 ...

  5. LOJ 2452 对称 Antisymmetry——用hash求回文串数

    概念 用hash求最长回文串/回文串数 首先,易知,回文串具有单调性. 如果字符串 $s[l...r]$ 为回文串串,那么 $s[x...y]$($l < x, y < r$ 且 $|l- ...

  6. Swagger2 模拟请求头

    前几天开发项目的时候,使用了Restful风格的接口.进行开发的时候,模拟请求头,带Token的时候遇到了一些问题.因为Api接口使用Swagger2进行搭建,所以找到了Swagger2 模拟head ...

  7. Hadoop集群分布搭建

    一.准备工作 1.最少三台虚拟机或者实体机(官网上是默认是3台),我这边是3台 s1: 10.211.55.18 s2: 10.211.55.19 s3: 10.211.55.20 2.安装JDK 3 ...

  8. 原生JS实现滑动验证功能

    一般很多网站都有滑动验证的功能,简单滑动验证的原理如下图所示: 主要理解思想就行 图中的代码可能和实际写的有所不同 HTML和CSS也可根据仔细的喜好就行修改 完整代码: <!DOCTYPE h ...

  9. 记录从裸机到TensorFlow GPU版运行 的配置过程

    实验室原来有一台装Ubuntu Server系统的服务器,安装有tensorflow,在使用过程中经常出现断网.死机.自动关机等毛病,忍无可忍,决定重装系统 配置如下:Dell工作站,Xeon-E5 ...

  10. P3588 [POI2015]PUS

    好题 思路:线段树优化建图+拓扑DP or 差分约束(都差不多): 提交:3次 错因:眼瞎没看题,Inf写的0x3f3f3f3f 题解: 类似差分约束的模型,\(a<b\rightarrow a ...