接口自动化 之 unittest+ddt+openpyxl 综合
前面写过python 之 unittest初探 和 python 之 unittest+ddt 两篇文章。在之前的文章中,写过可以再次优化。今天写第三篇的目的,就是在原有基础上,基于 openpyxl模块再次优化。在第二篇中,注意到测试数据与代码写在一起,实在是难以维护操作,而我们平时书写测试用例,记录测试数据,通常会使用excel文件或者csv文件。因此,本篇主要使用openpyxl模块对xlsx文件的操作,读取或者写入数据,做到测试数据与代码分离。这样子测试用例也非常便于维护。 基于书中的源码,我做出了一些改动,可以做到在一定格式下,完全读取excel文件的测试数据。本次优化,需要先定义一个DoExcel类,在里面封装2个方法,一个是读取测试数据,另一个是写入数据。 废话少说,直接上代码:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time :2018/12/11 13:13
# @Author :Yosef
# @Email :wurz529@foxmail.com
# @File: :tryopenpyxl.py
# @Software :PyCharm Community Edition
import openpyxl
class DoExcel():
def __init__(self, filename, sheetname):
self.filename = filename
self.sheetname = sheetname '''
读取文件中的所有测试数据:
'''
def read_data(self):
wb = openpyxl.load_workbook(self.filename)
sh = wb[self.sheetname]
# print(wb.active) col_max = sh.max_column
testdata_key=[]
for i in range(1,col_max+1):
testdata_key.append(sh.cell(1, i).value) testdatas = []
row_max = sh.max_row
for i in range(2, row_max+1):
testdata = {}
for j in range(1, row_max-1):
testdata[testdata_key[j-1]] = sh.cell(i, j).value
testdatas.append(testdata) return testdatas '''
往文件中写入数据
往文件中写入数据需要三个参数,分别是row(行),col(列),以及value
'''
def write_data(self,row,col,value):
wb = openpyxl.load_workbook(self.filename)
ws = wb[self.sheetname] ws.cell(row,col).value = value
wb.save(self.filename) if __name__ == "__main__":
testdatas = DoExcel("hello.xlsx","data").read_data()
# print(testdatas)
for item in testdatas:
print(item)
DoExcel("hello.xlsx","data").write_data(10,10,"Test")
这个类写好之后,我们就可以在昨天的代码里使用啦~在此之前,我们先看一下excel文件内容:
然后,在之前的代码中稍作修改,将@data后面的具体测试数据换成我们读取的参数,然后再试一下。
import unittest
from ddt import ddt, data
import HTMLTestRunner
import time
from auto_test_interface.tryopenpyxl import DoExcel testdatas = DoExcel("hello.xlsx","data").read_data() @ddt # 代表这个测试类使用了数据驱动ddt
class TestCases(unittest.TestCase): def setUp(self):
print("*******************************") def tearDown(self):
print("\n") @data(*testdatas)
def test_testcases(self, value):
# print("这是一条测试用例case")
print(value)
try: print("test pass")
except Exception as e:
print("出错啦,错误结果是%s" % e)
print("test failed")
raise e # if __name__ == "__main__":
# unittest.main() suite = unittest.TestSuite()
loader = unittest.TestLoader()
suite.addTest(loader.loadTestsFromTestCase(TestCases)) report_dir = "../Test report"
now = time.strftime("%Y-%m-%d %H-%M-%S")
reportname = report_dir + "/" + now + " Test report.html" with open(reportname, "wb+") as file:
runner = HTMLTestRunner.HTMLTestRunner(file, 2, title="Model test report",
description="Hello testers! This is the description of Model test"
"report")
runner.run(suite)
运行代码之后,我们来看一下控制台的输出:
这是HTML的结果:
通过上图可以看到,在excel中的数据都已被取出。如果需要具体操作某一条数据,只需要从字典里取值就好了!这里的代码都是为了方便阅读写在了一起,自己试的时候,记得按照项目结构来写呀~如果有不足之处,欢迎各位大佬指正!
接口自动化 之 unittest+ddt+openpyxl 综合的更多相关文章
- 接口自动化之unittest+ddt
我在上一篇(https://www.cnblogs.com/wlyhy/p/10083318.html) 文章整理了unittest的模板,但在后续学习中,发现还有许多值得优化的地方.例如在我们设计测 ...
- 接口自动化-python unittest+requests+HTMLrunner
从2015年毕业入行软件测试,快满4年了,之前技术分享都在百度贴吧上面,现在正式开始在博客中记录工作技术,努力成长,加油 接口测试的步骤1.组装好该接口需要的参数数据2.使用get或post附带参数数 ...
- 接口自动化(unittest)
一.用例 TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoader是用来加载TestCase到TestSuite中的 TestRunn ...
- 【python接口自动化框架-unittest】如何传参数到下一个case
1.前提 平时我们用unittest的时候,都知道每个test_ 都是相互独立的,但是很多现实情况是,我们下一个接口参数,可能会用到上一个接口返回的json字段,那么,我们怎么去实现呢 2.实例 1. ...
- 接口自动化--数据驱动(ddt)
上次我们提到了unittest单元测试框架,运用单元测试框架unittest进行编写测试用例 但是遇到了一个问题,就是难道我一个测试点中有多个测试用例,我要每一个都要去编写一条测试用例嘛?这实在是太复 ...
- python接口自动化:requests+ddt+htmltestrunner数据驱动框架
该框架分为四个包:xc_datas.xc_driven.xc_report.xc_tools. xc_datas:存放数据,xc_driven:存放执行程序,xc_report:存放生成的报告,xc_ ...
- python-request 实现企业微信接口自动化-1(DDT)
环境准备 python+requests 读取企业微信api开发文档,得知调用企业微信接口必须先获取企业微信的accesstoken是通过 ("corpid","&quo ...
- 【python接口自动化框架-unittest】【一】unittest单元测试框架概念
一.unittst单元测试框架 概念参考:https://docs.python.org/2/library/unittest.html 使用方法:import unittest (引入unittes ...
- 接口自动化之unittest初探
最近几天苦心钻研unittest,终于略有所得,所以想来跟大家分享一下.有关python和unittest的基础知识部分就不在一一细说,相信各位也不是小白了.如果需要我整理基础知识,欢迎留言,我会看情 ...
随机推荐
- 点云数据保存为pcd文件_pcd_write.cpp
#include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h> int main ...
- [Cookie] Clear Cookie
import com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport def myCookies = testRunner.testCa ...
- CRISPR/Cas9基因敲除原理及实验建议
CRISPR/Cas9基因敲除原理及实验建议 CRISPR Cas9已经成为了最受欢迎的基因编辑技术之一,在2016年的国自然基金中也有很多项目是关于 CRISPR Cas9的.目前在市场上已经有 ...
- spring事务以及springweb
什么是事务.事务特性.事务隔离级别.spring事务传播特性 https://www.cnblogs.com/zhangqian1031/p/6542037.html Spring AOP 中@Poi ...
- 第几天——第九届蓝桥杯C语言B组(省赛)第一题
原创 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 这题是送分题,只需要注意一下2000年 ...
- Rsync+Inotify实现文件自动同步
1>rsync概述 rsync的优点与不足 rsync与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求 ...
- Oracle發送email功能
Oracle 提供一個一個UTL_SMTP,可以發送email,結合oracle本身強大的schedule功能,比寫一隻排程效率高,且更簡單. split功能 /*創建package STRING_F ...
- Docker 1.3.3/1.4.0 发布下载,Linux 容器引擎
Docker 1.3.3 发布,下载地址: https://github.com/docker/docker/archive/v1.3.3.zip 改进记录包括: Security Fix path ...
- 极大似然估计MLE 极大后验概率估计MAP
https://www.cnblogs.com/sylvanas2012/p/5058065.html 写的贼好 http://www.cnblogs.com/washa/p/3222109.html ...
- 526. Beautiful Arrangement
Suppose you have N integers from 1 to N. We define a beautiful arrangement as an array that is const ...