前言
明天就放假了,4天小长假,是不是很开心!也许很多人要回老家帮家里种地,干农活。其实能陪陪家里人,帮忙干点农活还是挺开心的,希望大家有个愉快的假期!废话不多说哈,今天再来说说pytest吧,经过几周的时间学习,有收获也有疑惑,总之最后还是搞个小项目出来证明自己的努力不没有白费
环境准备
序号库/插件/工具安装命令
1确保您已经安装了python3.x
2配置python3+pycharm+selenium2开发环境
3安装pytest库:pip install pytest
4安装pytest -html 报告插件:pip install pytest-html
5安装pypiwin32库(用来模拟按键):pip install pypiwin32
6安装openpyxl解析excel文件库:pip install openpyxl
7安装yagmail发送报告库:pip install yagmail
8确保已配置火狐或谷歌浏览器及对应驱动
9确保已经正确配置好发送邮件的邮箱
项目简介
测试地址
https://mail.126.com
测试范围
1.126电子邮箱登录功能测试-验证正确帐号密码登录成功-验证错误用户名密码登录失败(有很多情况,用例里面做了充分的校验)
2.126电子邮箱添加联系人功能测试-验证正确填写必填项数据添加联系人成功-验证缺省必填项数据添加联系人失败-验证必填项字段数据格式错误添加联系人失败
3.126电子邮箱发送邮件功能测试-验证普通邮件发送成功-验证带附件邮件发送成功
项目设计
1.python编程语言设计测试脚本
2.webdriver驱动浏览器并操作页面元素
3.二次封装webdriver Api 操作方法
4.采用PageObject设计模式,设计测试业务流程
5.通过UI对象库存储页面操作元素
6.通过数据文件存储数据,读取数据,参数化测试用例并驱动测试执行
7.通过第三方插件pytest-html生成测试报告
8.通过yagmail第三方库,编写发送报告接口,测试工作完成后自动发送测试报告
代码分析
目录结构
目录结构
代码实现
通过126邮箱测试范围分析,我们需要通过设计剪切板,模拟键盘完成附件上传操作,因此我们首先来编写这两个方法
clipboard.py-操作剪切板
keyboard.py-模拟键盘
通过测试项目设计,我们需要把测试数据存放在Excel文件中,把页面操作元素存在UI对象库中也就是一个配置文件,那么我们需要对Excel 和 ini文件解析,因此我们开始编写这两个方法,设计UI对象库和测试数据文件
parseExcelFile.py-解析Excel文件
parseConFile.py-解析配置文件
config.ini
新建excel文件,分3个sheet,分别为:login,contact,mail #每个sheet中数据可自行填写,驱动测试用例执行不同的数据进行测试
login
contact
数据,UI对象库,解析方法都已经有了,接下来通过PageObject模式设计编写每个页面的操作及封装126邮箱的功能,以便后续设计用例调用
BasePage.py-webdriver二次封装
HomePage.py-邮箱首页选择菜单
LoginPage.py-封装登录功能
ContactPage.py-封装添加联系人功能
SendMailPage.py-封装发送邮件功能
所有的准备工作都已经做好了,还有一个问题,我们的添加联系人和发送邮件应该是否应该在已经登录的前提下测试呢?答案是肯定的。所以我们在用例同目录下新建conftest.py文件并调用登录功能(为什么这么做,不明白的小伙伴可以去看一下我之前的文章,关于conftest.py的原理)
conftest.py-同用例目录下,调用登录功能
ok,开始编写测试用例啦
test_loginCase.py-登录功能测试
test_contactCase.py-添加联系人功能测试
test_sendMailCase.py-发送邮件功能测试
问题
用例已经写完了,有两个问题
1.有没有发现我们的报告怎么生成的?也没有失败用例截图?
2.我们貌似并没有编写驱动浏览器的代码?
现在我们来解决这个两个问题
根据pytest的conftest.py文件的原理,我们可以把驱动浏览器的代码写在一个全局的conftest.py文件里面。报告生成其实是通过命令 pytest --html=‘report.html’ --self-contained-html生成的,但是这样的报告对用例的描述不是很清晰,且没有对失败用例截图,也不方便我们分析项目的缺陷,我们也可以填写代码放到这个文件里面(关于报告修改的文章)
conftest.py-全局conftest.py文件
最后呢,为了减小项目维护成本,我们把一些全局的配置项,放到我们的功能配置文件中共全局使用,包括运行用例的一些命令字符串,可以自行修改
conf.py-全局配置文件
运行项目
通过命令运行
1.cmd切换到项目的根目录,执行pytest --html=‘report.html’ --self-contained-html命令(此运行方式,无法发送测试报告邮件)
这种方式感觉有点low,我们换另外一种方式,可以通过os模块自动执行相关命令,编写运行用例代码
RunTestCase.py-执行用例文件
我们可以直接执行这个文件执行所用的测试用例了!
其实我们运行用例往往不只是 使用pytest --html=‘report.html’ --self-contained-html 这样一个简单的命令运行,通常会添加很多的命令选项,比如-v,-q,-s等等,那么怎么办呢?这时候就用到了pytest.ini配置文件了
只添加了几个简单的命令选项(pytest.ini具体使用及原理)
pytest.ini-pytest配置文件
测试输出
1.自动生成html格式报告,其中报告里面附带用例执行日志明细,及用例失败自动截图(部分报告展示)
2.自动发送测试邮件给指定用户