前面写过python 之 unittest初探 和 python 之 unittest+ddt 两篇文章。在之前的文章中,写过可以再次优化。今天写第三篇的目的,就是在原有基础上,基于 openpyxl模块再次优化。在第二篇中,注意到测试数据与代码写在一起,实在是难以维护操作,而我们平时书写测试用例,记录测试数据,通常会使用excel文件或者csv文件。因此,本篇主要使用openpyxl模块对xlsx文件的操作,读取或者写入数据,做到测试数据与代码分离。这样子测试用例也非常便于维护。 基于书中的源码,我做出了一些改动,可以做到在一定格式下,完全读取excel文件的测试数据。本次优化,需要先定义一个DoExcel类,在里面封装2个方法,一个是读取测试数据,另一个是写入数据。 废话少说,直接上代码:

  1. #!/usr/bin/python3
  2. # -*- coding: utf-8 -*-
  3. # @Time :2018/12/11 13:13
  4. # @Author :Yosef
  5. # @Email :wurz529@foxmail.com
  6. # @File: :tryopenpyxl.py
  7. # @Software :PyCharm Community Edition
  8. import openpyxl
  9. class DoExcel():
  10. def __init__(self, filename, sheetname):
  11. self.filename = filename
  12. self.sheetname = sheetname
  13.  
  14. '''
  15. 读取文件中的所有测试数据:
  16. '''
  17. def read_data(self):
  18. wb = openpyxl.load_workbook(self.filename)
  19. sh = wb[self.sheetname]
  20. # print(wb.active)
  21.  
  22. col_max = sh.max_column
  23. testdata_key=[]
  24. for i in range(1,col_max+1):
  25. testdata_key.append(sh.cell(1, i).value)
  26.  
  27. testdatas = []
  28. row_max = sh.max_row
  29. for i in range(2, row_max+1):
  30. testdata = {}
  31. for j in range(1, row_max-1):
  32. testdata[testdata_key[j-1]] = sh.cell(i, j).value
  33. testdatas.append(testdata)
  34.  
  35. return testdatas
  36.  
  37. '''
  38. 往文件中写入数据
  39. 往文件中写入数据需要三个参数,分别是row(行),col(列),以及value
  40. '''
  41. def write_data(self,row,col,value):
  42. wb = openpyxl.load_workbook(self.filename)
  43. ws = wb[self.sheetname]
  44.  
  45. ws.cell(row,col).value = value
  46. wb.save(self.filename)
  47.  
  48. if __name__ == "__main__":
  49. testdatas = DoExcel("hello.xlsx","data").read_data()
  50. # print(testdatas)
  51. for item in testdatas:
  52. print(item)
  53. DoExcel("hello.xlsx","data").write_data(10,10,"Test")

这个类写好之后,我们就可以在昨天的代码里使用啦~在此之前,我们先看一下excel文件内容:

然后,在之前的代码中稍作修改,将@data后面的具体测试数据换成我们读取的参数,然后再试一下。

  1. import unittest
  2. from ddt import ddt, data
  3. import HTMLTestRunner
  4. import time
  5. from auto_test_interface.tryopenpyxl import DoExcel
  6.  
  7. testdatas = DoExcel("hello.xlsx","data").read_data()
  8.  
  9. @ddt # 代表这个测试类使用了数据驱动ddt
  10. class TestCases(unittest.TestCase):
  11.  
  12. def setUp(self):
  13. print("*******************************")
  14.  
  15. def tearDown(self):
  16. print("\n")
  17.  
  18. @data(*testdatas)
  19. def test_testcases(self, value):
  20. # print("这是一条测试用例case")
  21. print(value)
  22. try:
  23.  
  24. print("test pass")
  25. except Exception as e:
  26. print("出错啦,错误结果是%s" % e)
  27. print("test failed")
  28. raise e
  29.  
  30. # if __name__ == "__main__":
  31. # unittest.main()
  32.  
  33. suite = unittest.TestSuite()
  34. loader = unittest.TestLoader()
  35. suite.addTest(loader.loadTestsFromTestCase(TestCases))
  36.  
  37. report_dir = "../Test report"
  38. now = time.strftime("%Y-%m-%d %H-%M-%S")
  39. reportname = report_dir + "/" + now + " Test report.html"
  40.  
  41. with open(reportname, "wb+") as file:
  42. runner = HTMLTestRunner.HTMLTestRunner(file, 2, title="Model test report",
  43. description="Hello testers! This is the description of Model test"
  44. "report")
  45. runner.run(suite)

运行代码之后,我们来看一下控制台的输出:

这是HTML的结果:

通过上图可以看到,在excel中的数据都已被取出。如果需要具体操作某一条数据,只需要从字典里取值就好了!这里的代码都是为了方便阅读写在了一起,自己试的时候,记得按照项目结构来写呀~如果有不足之处,欢迎各位大佬指正!

接口自动化 之 unittest+ddt+openpyxl 综合的更多相关文章

  1. 接口自动化之unittest+ddt

    我在上一篇(https://www.cnblogs.com/wlyhy/p/10083318.html) 文章整理了unittest的模板,但在后续学习中,发现还有许多值得优化的地方.例如在我们设计测 ...

  2. 接口自动化-python unittest+requests+HTMLrunner

    从2015年毕业入行软件测试,快满4年了,之前技术分享都在百度贴吧上面,现在正式开始在博客中记录工作技术,努力成长,加油 接口测试的步骤1.组装好该接口需要的参数数据2.使用get或post附带参数数 ...

  3. 接口自动化(unittest)

    一.用例 TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoader是用来加载TestCase到TestSuite中的 TestRunn ...

  4. 【python接口自动化框架-unittest】如何传参数到下一个case

    1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...

  5. 接口自动化--数据驱动(ddt)

    上次我们提到了unittest单元测试框架,运用单元测试框架unittest进行编写测试用例 但是遇到了一个问题,就是难道我一个测试点中有多个测试用例,我要每一个都要去编写一条测试用例嘛?这实在是太复 ...

  6. python接口自动化:requests+ddt+htmltestrunner数据驱动框架

    该框架分为四个包:xc_datas.xc_driven.xc_report.xc_tools. xc_datas:存放数据,xc_driven:存放执行程序,xc_report:存放生成的报告,xc_ ...

  7. python-request 实现企业微信接口自动化-1(DDT)

    环境准备 python+requests 读取企业微信api开发文档,得知调用企业微信接口必须先获取企业微信的accesstoken是通过 ("corpid","&quo ...

  8. 【python接口自动化框架-unittest】【一】unittest单元测试框架概念

    一.unittst单元测试框架 概念参考:https://docs.python.org/2/library/unittest.html 使用方法:import unittest (引入unittes ...

  9. 接口自动化之unittest初探

    最近几天苦心钻研unittest,终于略有所得,所以想来跟大家分享一下.有关python和unittest的基础知识部分就不在一一细说,相信各位也不是小白了.如果需要我整理基础知识,欢迎留言,我会看情 ...

随机推荐

  1. 设计模式(java)--中介者模式之同事的关联

    转自:http://blog.csdn.net/zhengzhb/article/details/7430098 定义:用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使 ...

  2. 单一入口及MVC目录规范

    单一入口指在一个web应用程序中,所有的请求都是指向一个脚本文件,例如我们经常看到某一个网站所有的页面都是index.php?xxxx这样的形式.所有对使用程序的访问都是必须通过这个入口. 目录规范:

  3. 1083 Moving Tables

    题目链接:http://poj.org/problem?id=1083 题意: 走廊两边分别有200个房间,一边连续编号为1-399的奇数,另一边是2-400的偶数, 如果从房间 i 移动桌子到房间 ...

  4. Linux 配置nfs

    原文:http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html 一.NFS服务简介 NFS 是Network File System的 ...

  5. spring mvc注解@RequestMapping

    1.url路径映射 基本功能 2.窄化请求映射 根路径+子路径 注意setViewName的路径. 3.限制http请求方法 get和 post 如果是get

  6. Head First Python之3文件与异常

    文件基本操作 Python从文本读取数据时,一次会到达一个数据行. sketch.txt文件 Man: Is this the right room for an argument? Other Ma ...

  7. tomcat 6.x + log4j日志配置并按天(或大小)生成文件

      tomcat日志,默认路径在${catalina.home}/logs目录下,默认使用的是tomcat自己封装的logging工具类,默认配置文件使用的${catalina.home}/conf/ ...

  8. Transaction And Lock--事务中使用return会回滚事务吗?

    事务中使用return会回滚事务吗? 答案:不会,如果在事务中没有显示提交或回滚事务边return,事务不会被提交或回滚,在C#中,如果没有使用连接池,则事务在连接断开和销毁时被强制回滚,如果使用连接 ...

  9. 常用的jQuery学习文档及使用经验

    分享几个jQuery学习的API在线文档 1. 首推 http://hemin.cn/jq/ 原因是全中文文档,文档排列通俗易懂,容易查找,示例清楚. 2. https://www.jquery123 ...

  10. Android下拉刷新完全解析

    http://blog.csdn.net/guolin_blog/article/details/9255575 http://www.cnblogs.com/loonggg/p/3201505.ht ...