上一篇博客,针对【用户注册页面】测试需求,设计基于python+(GUI)的可批量生成测试数据的用户图形界面。
今天,我来尝试使用python+GUI 搭建一个自动化测试框架的demo
一. 主要实现目标
测试人员只需要配置csv文件,在界面选择需要执行的csv文件,就可实现测试用例的运行,然后生成相关的测试报告,bug报告,以及将bug信息通过email方式发送给开发工程师。
二. 成果展示
2.1》页面展示图
操作人员参考示意图:
2.2》配置文件(config)说明
csv配置文件如下:
执行状态:执行状态=1 执行 ;执行状态=0 不执行;
执行顺序:根据执行顺序从小到大的顺序来进行python脚本的运行顺序
开发人员以及邮箱:方便将错误bug发送给对应的开发工程师邮箱
2.3》最终框架组成以及各模块之间关联关系:
驱动层(driver)从配置层(config)中读取配置内容,并执行相关的python测试用例脚本,将执行结果生成测试报告(testReport)和错误报告(bugReport),同时将bug信息通过email方式发送给相关开发工程师。
注:黄色为组成模块,绿色为解释说明
三. 代码实现过程
3.1》GUI页面实现说明:页面内所有控件如下
3.2》代码类图简设计:
3.3》主要流程说明:
3.4》遇到的问题总结
1) GUI StaticText控件对字体大小的设置
解决方案:
self.stext_bz2 = wx.StaticText(self.panel, label="(注:仅针对使用unittest框架的测试用例")
# 字体颜色设置
self.stext_bz2.SetForegroundColour("red")
# 字体大小设置
font = wx.Font(8, wx.DECORATIVE, wx.ITALIC, wx.NORMAL)
# 指定哪一个控件的字体大小进行设置
self.stext_bz.SetFont(font)
2)list是多维数据组成,根据第二位内容进行排序
解决方案:
# 第二个实验:list排序(根据第二个字段)
datalist=[]
datalist.append(['a',1])
datalist.append(['b',3])
datalist.append(['c',2])
# 获取列表的第二个元素
def takeSecond(elem):
return elem[1]
# list.sort(key=takeSecond)
for i in datalist:
print(i)
3) import wx 报错提示:DLL load failed: 找不到指定的模块
解决方案:
S1:卸载wxpython模块:pip uninstall wxPython
S2:重新安装wxpython模块:pip3 install -i https://pypi.douban.com/simple wxpython
4)如何在一个python文件中执行另一个python脚本文件
#第一个实验:在一个python文件执行另一个python
#第一种办法:通过os.system相当于在cmd命令行中执行python脚本
import os
path=str("python C:\\a_Python\Project\TestGUIFrame\script\Interface\\testA.py")
os.system(path)
#第二种办法:在当前python脚本内导入 待执行的文件类
from script.Interface.testA import classA
# 实例化classA
obj=classA()
obj.test_case1(2)
四. 拓展出来的独立新功能
1)GUI_点击按钮,弹出文件框,选择文件
def function_OpenFile(self, event):
# wildcard匹配通配符
fileWindow = wx.FileDialog(self.panel, message="打开文件夹", wildcard="*.csv")
if fileWindow.ShowModal() == wx.ID_OK:
path = fileWindow.GetPath()
if path != "":
self.text_filePath.SetValue(path)
2)python脚本实现 _发送邮件
def sendEmail(self,fromEmail,fromAuthCode,toEmail,subject,strcontent):
# S1:用户登录
# 设置邮箱SMTP 的服务器地址:QQ邮箱的SMTP地址是smtp.qq.com
smtp=smtplib.SMTP("smtp.qq.com")
# 设置发送人的邮箱和授权码(不能是邮箱的真正密码)
smtp.login(fromEmail,fromAuthCode)
print("登陆成功")
# S2:编辑邮件内容
# 设置邮件的正文内容,格式是html,utf-8 编码防止中文乱码
content=MIMEText(strcontent,"html","utf-8")
# 设置邮件的主题
content["subject"]=Header(subject)
# 发件人邮箱
content["from"]=fromEmail
# 收件人邮箱
content["to"]=toEmail
# S3:发送邮件
smtp.sendmail(content["from"],content["to"],str(content))
# S4:关闭邮件服务器
smtp.close()
3)执行python脚本,并获取print结果内容(将print打印出来的内容当做参数传给另一个方法)
# 第三个实验:执行python脚本,并返回print结果内容
import os
import ast
f=os.popen(r"python G:\Python\Project\TestGUIFrame\script\Interface\testA.py","r")
d = f.buffer.read().decode(encoding='utf8') # 读文件
dlist=d.split("\r\n")
print(dlist)
# 获取字典倒数第二个内容
resultcount=dlist[-2]
# #string字符串转字典类型
result_dict=ast.literal_eval(resultcount)
print(result_dict)
f.close()
五.扩展
现在我已经拿到了bug内容,如果通过selenium在禅道上自动创建bug单,是不是也可以行得通?稍后我再试一下。