
框架:unittest
请求处理:requests
excel数据处理:openpyxl
参数化:ddt
配置解析器:configparser
报告模板:HTMLTestRunnerNew.py(下载地址:https://pan.baidu.com/s/1w9AZU9AkIpxCYuzTto0EQA?pwd=1234)
testdemo.xlsx:测试数据,注意:implement=y为执行数据,否则不执行
----->case.config 配置文件
----->DoCase.py 测试用例类
----->DoConfig 配置文件处理
----->DoExcel.py Excel文件处理类,筛选有效数据返回
----->DoHttp.py http请求处理类
----->HttpRunner unittest加载用例执行生成报告
----->report.html 执行后生成的报告
----->HTMLTestRunnerNew.py 测试报告模板


[CASE]
caseid=[1,3]
#测试用例类
import unittest
from test02.DoHttp import Request_Http#引入请求类
from ddt import ddt,data,unpack#引入ddt做参数化
from test02.DoExcel import GetExcelData
data_list = GetExcelData("C:\\Users\\Administrator\\Desktop\\testdemo.xlsx","s1").get_data()
#用例类
@ddt#装饰器装饰类
class HttpCase(unittest.TestCase):#继承unittest测试用例类
@data(*data_list)#脱外套
def test_login_yes(self,item):
res = Request_Http(item["method"], item["url"], item["data"]).request_http()
try:
self.assertEqual(item["expect"],res.json()["code"])#断言:预期与实际是否相等
except Exception as e:
print("断言异常:{0}".format(e))
raise e#抛出异常
import configparser
class GetConfig():
def get_config_data(self,file,section,option):
cf = configparser.ConfigParser()
cf.read(file, encoding="utf8") # 读取config,有中文注意编码
# 返回value
return cf[section][option]
from openpyxl import load_workbook
from test02.DoConfig import GetConfig
class GetExcelData():
def __init__(self,file,sheet):
self.file=file
self.sheet=sheet
def get_data(self):
caseid = eval(GetConfig().get_config_data("case.config","CASE","caseid"))#处理配置文件获取要执行的caseid
wb = load_workbook(self.file)#打开excel
sheet = wb[self.sheet]#定位工作簿
data_list = []
for n in range(2,sheet.max_row+1):
data_dic = {}
for m in range(2,sheet.max_column+1):
data_dic["case_id"] = sheet.cell(n, 1).value
data_dic["module"] = sheet.cell(n, 2).value
data_dic["title"] = sheet.cell(n, 3).value
data_dic["method"]=sheet.cell(n,4).value
data_dic["url"]=sheet.cell(n,5).value
data_dic["data"]=eval(sheet.cell(n, 6).value)#还原数据类型
data_dic["expect"]=sheet.cell(n, 7).value
if data_dic["case_id"] in caseid:#判断case_id是否包含在配置文件中
data_list.append(data_dic)
return data_list
#http请求处理类
import requests
class Request_Http():
def __init__(self,method,url,data,expected=None,headers=None,cookie=None):
self.method=method.lower()#请求方式转小写
self.url=url
self.data=data
self.excepted=expected
self.headers=headers
self.cookie=cookie
def request_http(self):
if self.method=="get":
try:
return requests.get(self.url, params=self.data, headers=self.headers, cookies=self.cookie)
except Exception as e:
print("异常请求:{0}".format(e))
raise e # 抛出异常
else:
try:
return requests.post(self.url,params=self.data,headers=self.headers,cookies=self.cookie)
except Exception as e:
print("异常请求:{0}".format(e))
raise e#抛出异常
#unittest加载用例执行生成报告
import unittest
from test02 import DoCase
import HTMLTestRunnerNew
suite = unittest.TestSuite()#存放测试用例
loader = unittest.TestLoader()#加载器
suite.addTest(loader.loadTestsFromModule(DoCase))#加载测试模块
#上下文管理器
with open("report.html","wb") as file:
runner = HTMLTestRunnerNew.HTMLTestRunner(stream=file, verbosity=2,title="标题",description="备注",tester="姓名")
runner.run(suite)

HTMLTestRunnerNew.py(下载地址:https://pan.baidu.com/s/1w9AZU9AkIpxCYuzTto0EQA?pwd=1234)
我想在Python程序运行之间保存一组键、值对(字符串、整数),在后续运行时重新加载它们,并写入更改以在下一次运行时可用。我不认为此数据是配置文件,但它非常适合ConfigParser功能。我只需要两个[部分]。它只有几百对而且非常简单,所以我认为没有必要做一个实际的数据库。这样使用ConfigParser合适吗?我还考虑过使用Perl和XML::Simple。那个怎么样?有没有办法在没有Python或Perl的情况下在bash中执行此操作? 最佳答案 嗯,你有更好的选择。例如,您可以使用pickle或json格式。Pickle序列
所以我在WindowsXP笔记本电脑上安装了Python3.4.1。我得到了openpyxl包(现在不记得是哪个版本了,我想是2.1),我一直在努力,编写自定义代码来根据我工作场所的需要修改Excel文档。然后我格式化了我的笔记本电脑(出于工作原因)并安装了Windows7。我再次掌握了Python3.4.1。我pip安装了openpyxl(在我的命令提示符中显示“pipinstallopenpyxl”)——这次绝对是2.1版。然后,我尝试打开我以前的一些工作簿。这是在IDLEGUI界面中-不是在脚本或任何东西中。我只是输入(在正确导入openpyxl->load_workbook之后
在OSX上,openpyxl.save()可以正常处理名为“all_done.xslx”的文件。然而,当它在Windows上尝试时,结果是:c:\Users\Tony\Desktop\ROI>pythonroi_cut6.py>log.txtTraceback(mostrecentcalllast):File"roi_cut6.py",line373,inmain()File"roi_cut6.py",line369,inmainprocessSource(wb,'Gemini',totalGeminiSpends,geminiRevenues)File"roi_cut6.py",li
📢作者:小小明-代码实体📢博客主页:https://blog.csdn.net/as604049322📢欢迎点赞👍收藏⭐留言📝欢迎讨论!今天我们将研究pandas如何使用openpyxl引擎读取xlsx格式的Excel的数据,并考虑以面向过程的形式简单的自己实现一下。截止目前本人所使用的pandas和openpyxl版本为:pandas:1.5.2openpyxl:3.0.10今天所有的测试全部基于以下文件:pandas的read_excel核心代码这里我使用pycharm工具对以下代码进行debug跟踪:importpandasaspddf=pd.read_excel("张三.xlsx")核
日常的工作和学习过程中充斥着大量excel操作,比如打开excel文件、计算数据、保存数据、绘图等等。python有诸多可以操作excel数据的模块如pandas,但想要一览完整的pandas是个相对庞大的工程,从操作excel出发python有更轻量的工具。本文将带大家认识一下python操作excel的模块——openpyxl,一个更容易上手的实用型模块。windows安装:openpyxl是第三方扩展库,通过pipinstallopenpyxl安装。日常excel的操作主要包括创建、读、写、画图。接下来我们逐一进行介绍。创建excel文件、sheet表openpyxl.Workbook(
我有点卡在ConfigParser上了。我想向现有部分添加特定设置。我愿意:importConfigParserConfig=ConfigParser.ConfigParser()ConfigConfig.read("/etc/yum.repos.d/epel.repo")Config.sections()Config.set('epel','priority',10)withopen('/etc/yum.repos.d/epel.repo','w')asfout:然后显示:...File"",line2^IndentationError:expectedanindentedblock
我一直在从事一个项目,在该项目中,我在.xlsx文档中搜索包含特定值“x”的单元格。到目前为止,我已经设法做到了,但我无法提取所述单元格的位置。这是我想出的代码:fromopenpyxlimportload_workbookwb=load_workbook(filename='Abstract.xlsx',use_iterators=True)ws=wb.get_sheet_by_name(name='Abstract')forrowinws.iter_rows():forcellinrow:ifcell.value=="E01234":print"TRUE"当我运行这个脚本时,如果在
我在Python2.7中使用ConfigParser来读取配置文件,我想知道如何读取一个值,以便在Python中将其设置为常量None。目前我的代码如下:config.set("TestSeriesParameters","TestSeriesParameter",None)但是,这显示为TestSeriesParameter="None"(作为字符串)。 最佳答案 根据2.7.2文档:Whenallow_no_valueistrue(default:False),optionswithoutvaluesareaccepted;th
forrownuminrange(0,len(self.sheet.rows)):forcellinself.sheet.rows[rownum]:printcell.value我想使用openpyxl逐行访问工作表中的所有单元格值。上面的代码有效但太慢了。如何更快地访问所有单元格值? 最佳答案 如果您只是从上到下和从左到右阅读单元格(像我们大多数人一样),您可以使用“优化阅读器”http://openpyxl.readthedocs.org/en/latest/optimized.html.它运行速度非常快(受CPU限制)并且内存
我几天前才开始使用openpyxl,它是一个很棒的库。但是,高级功能的文档似乎很少。我有几个问题。openpyxl似乎将我插入的公式更改为小写,这导致来自excel的未知引用。此外,我更改了工作表的名称以适应小写字母,但仍然找到#NAME?引用所在的单元格出错。谁能告诉我如何或在哪里找到如何从openpyxl中的另一个工作表引用单元格importopenpyxl.Workbookwb=Workbook()ws=wb.get_active_sheet()#showsuplowercasewithnameerrorinexcelws.cell('A1).value="$'Sheet'.E7