Pytest+POM+数据驱动+Allure测试报告+Jenkins
1.PyTest测试框架介绍与环境部署
pytest是非常主流的单元测试框架
单元测试:对软件中最小单元的测试 函数,模块,白盒测试
单元测试框架:模板 规范
提供测试用例组织执行:成百上千更方便维护,有顺序执行用例
生成测试报告
断言不需要自己if判断, 使用assert
单元测试框架和自动化框架有什么关系:
自动化框架组成部分包括:关键字驱动,数据驱动,单元测试框架,
安装pip install pytest
检测 pip list|findstr “pytest”
2.Pytest基本应用
安装:pip install pytest-ordering
• 在测试方法上加下面装饰器
•@pytest.mark.last—最后一个执行
• @pytest.mark.run(order=1)—第几个执行
pytest默认按字母顺序去执行的
import pytest
# def setup_module():
# print('作用于整个模块')
#
# def teardown_module():
# print('作用于关闭整个模块')
class Testcase:
# def setup_class(self):
# print("类的前置条件,打开浏览器,加载网页,或者创建数据库连接")
# def teardown_class(self):
# print("类的后置条件")
def setup(self):
print("方法执行前要做的事情")
def teardown(self):
print("方法执行后要做的事情,关闭浏览器")
@pytest.mark.run(order=3)
def test_01(self):
print('第一条用例')
assert 1==1
@pytest.mark.run(order=2)
def test_02(self):
print('第二条用例')
assert 1 == '1'
@pytest.mark.run(order=1)
def test_03(self):
print('第三条用例')
assert 1 == 2
if __name__ == '__main__':
pytest.main(['-sv','py_test.py'])
初始化模块→类→函数,清除模块。。
#@file:py_test.py
import pytest
def setup_module():
print('作用于整个模块')
def teardown_module():
print('作用于关闭整个模块')
class Testcase:
def setup_class(self):
print("类的前置条件,打开浏览器,加载网页,或者创建数据库连接")
def teardown_class(self):
print("类的后置条件")
def setup(self):
print("方法执行前要做的事情")
def teardown(self):
print("方法执行后要做的事情,关闭浏览器")
# @pytest.mark.run(order=3)
def test_01(self):
print('第一条用例')
assert 1==1
# @pytest.mark.run(order=2)
@pytest.mark.skip()
def test_02(self):
print('第二条用例')
assert 1 == '1'
# @pytest.mark.run(order=1)
@pytest.mark.skipif(9>18,reason='nonono')
def test_03(self):
print('第三条用例')
assert 1 == 2
if __name__ == '__main__':
pytest.main(['-sv','py_test.py'])
3.Conftest与PyTest.ini详解
conftest.py是pytest特有的本地测试配置文件,既可以用来设置项目级别的fixture,也可以用来导入外部插件。conftest.py文件名称是固定的,pytest会自动识别该文件,只作用于它所在的目录及子目录。
conftest.py
import pytest
@pytest.fixture()
def fix1():
print('\n开始执行fix1')
test_case01.py
import pytest
# @pytest.mark.usefixtures('fix1')
def test_case01(fix1):
print('---用例1---')
if __name__ == '__main__':
pytest.main(['-s','test_case01.py'])
pytest.ini配置文件大家自行百度,不在这里复述
4.基于PyTest实现POM自动化
查找一个商品流程,关键字驱动:把常用的方法封装在base目录下面
写登录流程,查找商品流程,用POM思想
5.结合数据驱动分离测试数据
把unittest的框架修改成pytest
# -*- coding:utf-8 -*-
#@time:2021-07-24 12:59:55
#@Author:Anonymous
#@file:test_cases.py
import pytest
from time import sleep
from page_object.index_page import IndexPage
from page_object.login_page import LoginPage
from selenium import webdriver
from ddt import ddt,file_data,data,unpack
from config.yamlload import loadyaml
#测试用例的设计
# @ddt
class TestCase():
# def setUpClass(cls) -> None:
def setup_class(cls) -> None:
cls.driver=webdriver.Chrome()
cls.lp=LoginPage(cls.driver)
cls.ip=IndexPage(cls.driver)
# def tearDownClass(cls) -> None:
def teardown_class(cls) -> None:
cls.driver.quit()
# @file_data('../data/user.yaml')
@pytest.mark.parametrize('udata',loadyaml('../data/user.yaml'))
def test_1_login(self,udata):
#用户名密码,不想写在这里,想创建一个单独管理,创建user.yaml
self.lp.login(udata['username'], udata['password'])
sleep(3)
# @data('手机','衣服','电脑')
@pytest.mark.parametrize('utxt',loadyaml('../data/search.yaml'))
def test_2_search(self,utxt):
self.ip.search(utxt['txt'])
sleep(3)
#如上这样写,一条用例创建一个浏览器,第二个用例又会创建一个浏览器,
if __name__ == '__main__':
# unittest.main()
pytest.main()
新建 data/search.yaml文件
-
txt: 手机
-
txt: 电脑
data/user.yaml
-
username : aaa
password : '1234567'
-
username : xuzhu666
password : '123456'
6.集成Allure实现测试报告
1.安装jdk1.8以上版本才可以运行Allure
2.解压Allure压缩包
3.配置Allure到环境变量,到path里面
allure测试报告是基于pytest运行后,生成的json文件,来实现的结果展示,以一个工程的形态展示本次的所有测试结果
要集成pytest实现allure的展示,需要安装:pip install allure-pytest
if __name__ == '__main__':
# 将测试发送到多个CPU
# pytest.main(["-n","2","test_many.py"])
# 使用与计算机具有的CPU内核一样多的进程
# pytest.main(["-n", "auto", "test_many.py"])
pytest.main(['--alluredir', './result', '-s', 'test_allure.py'])
os.system('allure serve ./result/ -o ./report_allure/ --clean')
allure下载及配置
1.下载allure
https://github.com/allure-framework/allure2/releases 2.配置allure系统环境变量,路径写成下载包所在的bin目录
例如: D:\PythonWork\allure-2.14.0\bin
3.cmd窗口验证环境变量配置是否成功
cmd可以,pycharm下不行,怎么办?重启pycharm试试,如下图关闭重启后Ok了
4.安装allure-pytest:
pip install allure-pytest
5.运行用例时使用allure生成报告
6.查看测试报告:
7.命令行输入 :allure serve 生成报告的目录
8.注意:如果安装了pytest-allure-adaptor,在pycharm使用allure时会报错:module ‘pytest’ has no attribute 'allure’或者AttributeError: module ‘allure’ has no attribute ‘severity_level’
此时需要先卸载adaptor: pip uninstall pytest-allure-adaptor
9.没有趋势,使用如下命令
os.system('allure serve ./result/ -o ./report_allure/ --clean')
#@File:run.py
#生成测试报告 allure测试报告
以上是一个小型的框架,使用了:
POM,数据驱动,yaml,pytest,allure
还缺少日志,断言,特殊元素处理,下拉框,iframe,数据库,execel,在此之前,把有可能会用到的特殊元素提前封装
7.搭配Jenkins实现自动化持续集成
互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)。
本文简要介绍持续集成的概念和做法。
一、概念
持续集成(Continuous integration)指的是,频繁地(一天多次)将代码集成到主干。
它的好处主要有两个。
(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。
(2)防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。
Martin Fowler说过,“持续集成并不能消除Bug,而是让它们非常容易发现和改正。”
与持续集成相关的,还有两个概念,分别是持续交付和持续部署。
二、持续交付
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。
三、持续部署
持续部署(continuous deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。
持续部署的前提是能自动化完成测试、构建、部署等步骤。它与持续交付的区别,可以参考下图。
Jenkins 是什么?
https://www.jenkins.io/zh/doc/ Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
下载https://www.jenkins.io/download/
篇幅有限
具体安装使用方法就不再复述