IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Pytest + Allure + Jenkins -> 正文阅读

[系统运维]Pytest + Allure + Jenkins

目录

1,pytest测试框架

1.2,具体使用

安装allure+pytest(pip)

Unittest VS pytest

?pytest安装&规则&约束

pytest断言

? 常用断言方法:?

pytest参数化

pytest常用运行参数

?pytest生成测试报告

pytest控制测试用例执行

?多进程运行用例

通过标记表达式执行用例

?重新运行失败用例

?pytest的setup & teardown函数


?

?

1,pytest测试框架

(1)单元测试:对软件中最小的单元(如函数‘,模块)进行测试

(2)框架:规范,帮助进行用例管理

(3)自动化框架:app自动化------appium

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?web自动化--------selenium

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 接口自动化--------request

1.2,具体使用

import pytest
class Testcase:
    def setup(self):
        print('start:  --------loading-------- ')

    def teardown(self):
        print('end:------------close--------')

    def test_01(self):
        print("the first test")
        assert 1 == 3

# 用例都是从上往下依次执行,若想先执行这个,可以用mark设置
    @pytest.mark.run(order=1)
    def test_02(self):
        print("the second test")
        assert 1 == 1

if __name__ == '__main__':
    # ['-s','-v','test_py.py']
    # -s 显示结果    -v显示详细用例
    pytest.main()

?配置pytest.ini文件可以改变命名规则:

[pytest]
python_files=test_*.py *_test.py   #文件都是以test_开头 或者 _test结尾命名,不符合则检测不到
python_classes=Test*
python_functions=test_*

安装allure+pytest(pip)

Unittest VS pytest

?

?

?pytest安装&规则&约束

? ?

?testpath在ini文件里面定义的测试路径。norecursedirs定义不想找的目录

在pytest.ini中定义:(pytest,ini中不能再注释中写中文,会报错!!)

[pytest]
; 只运行指定路径testpaths下文件(该行中文不可以写)
testpaths = testing doc
; 不运行该指定目录
norecursedirs = doc*

pytest断言

电商网站登录

from _pytest.monkeypatch import derive_importpath
import pytest
from selenium import webdriver
from time import sleep

def test_login_success():
    driver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
    driver = webdriver.Chrome(executable_path=driver_path)
    driver.get("http://39.98.138.157/shopxo")
    driver.find_element_by_link_text("登录").click()
    driver.find_element_by_xpath("//*[@name='accounts']").send_keys("1111111111")
    driver.find_element_by_xpath('//*[@name="pwd"]').send_keys("1111111111")
    driver.find_element_by_xpath("//button[text()='登录']").click()
    sleep(2)
    # test equall?
    #
    welcome = driver.find_element_by_xpath("//*[contains(text(),'欢迎来到')]").text

    # assert '1111111111, 欢迎来到' == welcome

    driver.quit()

if __name__ == '__main__':
    pytest.main(["-s","test_cema_assert.py"])

断言成功:

? 常用断言方法:

pytest参数化

import pytest
from selenium import webdriver
from time import sleep

@pytest.mark.parametrize(
    "user,pw,excepted",
    [("1111111111","1111111111","1111111111,欢迎来到"),
    ("dsgfas","1","1111111111,欢迎来到")],
    ids=["case1","case2"])
#以上是两组用例:case1和case2
def test_login(user,pw,excepted):
    driver_path = r"C:\Program Files\Google\Chrome\Application\chromedriver.exe"
    driver = webdriver.Chrome(executable_path=driver_path)
    driver.get("http://39.98.138.157/shopxo")
    driver.find_element_by_link_text("登录").click()
    driver.find_element_by_xpath("//*[@name='accounts']").send_keys(user)
    driver.find_element_by_xpath('//*[@name="pwd"]').send_keys(pw)
    driver.find_element_by_xpath("//button[text()='登录']").click()
    sleep(2)
    # test equall?
    #
    welcome = driver.find_element_by_xpath("//*[contains(text(),'欢迎来到')]").text

    assert excepted == welcome

    driver.quit()

if __name__ == '__main__':
    pytest.main(["-s","test_param.py"])

pytest常用运行参数

?

?

?

?pytest生成测试报告

(1)生成junitXML文件(在指定文件夹report中)

?

(2)生成在线报告

pytest控制测试用例执行

import pytest

def test_fail01():
    print("第一次失败")
    assert 1==2

def test_fail02():
    print("第二次失败")
    assert 1==2

def test_fail03():
    print("第三次成功")
    assert 1==1

if __name__ == '__main':
    pytest.main(["--maxfail=2","test_control.py"])



?多进程运行用例

安装pytest-xdist(用pip)

将测试发送到2个CPU

pytest.main(["-n","2","test_many.py"])

使用与计算机具有的CPU内核一样多的进程

pytest.main(["-n","auto","test_many.py"])

import py
import pytest

def test_case01():
    assert 1==1

def test_case02():
    assert 1==1

def test_case03():
    assert 1==12

def test_case04():
    assert 1==3

def test_case05():
    assert 1==12

def test_case06():
    assert 1==1

if __name__ == '__main__':
    # 将测试发送到2个CPU
    # pytest.main(["-n","2","test_many.py"])
    # 使用与计算机具有的CPU内核一样多的进程
    pytest.main(["-n","auto","test_many.py"])

?

通过标记表达式执行用例

pytest -m slow

这条命令会执行被装饰器@pytest.mark.slow装饰的所有测试用例

配置pytest.ini文件:

[pytest]
markers = 
    slow: marks tests as slow(deselect with '-m "not slow"')
    serial

?前面表示会执行mark的用例,括号内是不选中标记的用例:则只会执行后两条

import pytest

def test_fail01():
    print("第一次失败")
    assert 1==2

@pytest.mark.slow
def test_fail02():
    print("第二次失败")
    assert 1==2

@pytest.mark.slow
def test_fail03():
    print("第三次成功")
    assert 1==1

if __name__ == '__main':
    # pytest.main(["--maxfail=2","test_control.py"])
    # 通过标记表达式执行
    pytest.main(["-m","slow","test_mark.py"])

?重新运行失败用例

?

?

?

?pytest的setup & teardown函数

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-18 16:20:37  更:2021-12-18 16:22:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 4:30:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码