Pytest+POM+数据驱动yaml+Allure测试报告+Jenkins自动化测试,可持续集成

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/
篇幅有限在这里插入图片描述
具体安装使用方法就不再复述

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Onesiphorus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值