webから自動python自動化(3):1 . pytest枠組み講義+集積allure

2 pytest設置。

pytestはpythonオープンの第3者庫、必要が設置してこそ使用

pip install pytest

4。pytest運行が例のいくつかのやり方で

2 .指定pythonコードで使用pytest運行

五pytest常用パラメータ運行。

  1. 例pytest +テスト用モジュール経路—————————執行対応モジュールの下のテスト用の例
pytest test_clac.py
# 执行test_clac.py文件下的所有以test开头的方法,以及以Test开头的类,且在类中以test开头的方法。
  1. pytest−v +テスト用例モジュール経路—————執行対応モジュールの下のテスト用の場合、そしてプリントを詳しく日誌

    pytest -v test_clac.py
    
  2. 例pytest−s +テスト用モジュール経路—————執行対応モジュールの下のテスト用の場合、そしてプリントコンソールニュース(となる

    pytest -s test_clac.py
    
  3. pytest—k場合『正則表現』+テスト用モジュール経路—————執行正則表現されて対応できるモジュールの下にふさわしい

    pytest -v -k 'jia' test_clac.py--------执行test_clac.py文件下,用例名称含‘jia’的测试用例,并且打印详细日志
    pytest -v -k 'jia or cheng' test_clac.py----执行test_clac.py文件下,用例名称含‘jia’或者含‘cheng’的测试用例,并且打印详细日志
    pytest -v -k 'not cheng' test_clac.py------执行test_clac.py文件下,用例名称含‘cheng’以外的所有测试用例,并且打印详细日志
    
  4. pytest test_clac . py——only collect test_clac収集の- - - - -

  5. pytest−m add test_clac . py—————————執行test_clac . py下

  6. test_clac pytest−v . py——xml junit = . / result執行—————

  7. pytest test_clac . py: testclac: test_jia test執行—————

(1)テストデータのパラメータ化

# filename:test_data.py
import pytest

# 方式一:使用string传参
class TestData1():
    @pytest.mark.parametrize("a,b",[(10,20),(30,40),(50,60)])
    def test_data1(self,a,b):
        print(a + b)

# 方式二:使用元组传参
class TestData2():
    @pytest.mark.parametrize(("a","b"),[(10,20),(30,40),(50,60)])
    def test_data2(self,a,b):
        print(a + b)

# 方式三:使用列表传参
class TestData3():
    @pytest.mark.parametrize(["a","b"],[(10,20),(30,40),(50,60)])
    def test_data3(self,a,b):
        print(a + b)

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

しデータのファイルを読み取る方法を実装:

我々をyamlできるデータの手続きを离れて、パッケージを一つの独立の方法

def get_data_from_yaml(path):
    with open(path,'r') as f:
        data = yaml.safe_load(f)
        return data

class TestCal:
    data = get_data_from_yaml
    
    @pytest.mark.parametrize('a,b',data(path='./case_data/test_calculatorcase_data.yaml'),ids=['first_case', 'two_case', 'three_case'])
    def test_add(self,a,b):
        assert True
        
# ids表示给用例取别名,每一组数据对应一条用例,对应一个别名

六.pytest fixture

2 .カスタムfixture

场面:

前に話したsetupやteardown執行で実現できる例の前、後に一部の操作、しかしこの足は全体を狙って
以下のシーンがあれば:1 .用が先に登録し、必要でない2 .登录が必要で、まず登録用3 .必要。多ファイル使用。

  • 命名方式を活用し、はsetupと名付けteardownという数に止まらない
  • conftest . py配置に実現できるデータ共有、必要ないimport自動的fixtureを见
  • scope =「session」はあまり。実現py多ファイル共有

実現のカスタムteardown

前我々の定義fixture方法でしか実現ごとで例から施行前に施行(setup)、どう実現ごとに

方法:定義fixture方法の中で、使用できるyield区分をsetup yield前の操作は、

import pytest #导入pytest

@pytest.fixture()
def login():
    """
    给对应的方法添加装饰器@pytest.fixture(),
    然后在需要调用的测试用例方法中传入该方法,即可。
    """
    print("登录方法") #setup
    yield

    print('退出登录方法') #teardown


def test_a(login):
    print('需要登录的测试用例')
    assert 1

def test_b():
    print('不需要登录的测试用例')
    assert 1

def test_c(login):
    print('需要登录的测试用例')
    assert 1

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

効果は以下の通り。

conftest .を通じて実現pyファイル共有fixture

conftest .置いpy文書の下にfixture全体が供conftest . py役割域の下の例でファイルをさせる

錬磨:

第一歩:創設一conftest . pyファイル

# filename = conftest.py
#coding=utf-8
import pytest
@pytest.fixture()
def loginss():
    print('开始ss执行用例')
    yield
    print('执行ss用例结束')

2歩:用の例で使用fixture loginss

import pytest
def test_a(loginss):
     assert True
def test_b(loginss):
     assert True
def test_c():
     assert True

注意conftest . py文書の役割ドメインは、

1 . conftest . py創設プロジェクトのリストでは、プロジェクトの下にすべて用の例にファイルを共有できる

2 . conftest . py創設どこか连__init__ .かばんpy書類かばんの中には、この下のすべてを例にファイルは計

fixtureパラメータで帰る

import pytest
@pytest.fixture(params=["参数1","参数2"])
def myfixture(request):
    return request.param

def test_print_param(myfixture):
    print("执行test_two")
    print(myfixture)
    assert 1==1

輸出は、

PASSED                    [ 50%]执行test_two 
参数1
PASSED                    [100%]执行test_two
参数2

注意:

  • fixtureパラメータ化し、に対しても使われる例の循環執行
  • setupで戻るパラメータの場合は、使用yield returnの代わりに
  • 人用の例で使うfixture関数fixtureで復帰を得ようとするパラメータ

(1) pytest . mark .表記人

使用できる『pytest . mark .人』で表記を例に添加表記

執行を例に』『pytest−m表記人を使って特殊の表記の執行を実現用の例

import pytest

@pytest.mark.demo
@pytest.mark.smoke
def test_a():
     assert True

@pytest.mark.demo
def test_b():
     assert True

@pytest.mark.smoke
def test_c():
     assert True

def test_d():
     assert True

執行用の例:

pytest -vs test_code.py -m="demo" # 执行模块下含demo标记的所有用例 ,执行test_a,test_b
pytest -vs test_code.py -m="demo and smoke" # 执行模块下含demo和smoke标记的所有用例 ,执行test_a
pytest -vs test_code.py -m "demo or smoke" # 执行模块下含demo或smoke标记的所有用例 ,执行test_a,test_b,test_c

注意:執行時、会報warning間違ってできる種目のリストで創設一pytest . ini書類を受けた後、pyt

(3) pytest . mark . skipif()条件を満たす時、スキップ用の例

import pytest

@pytest.mark.skipif(1 == 1,reason='不想执行呢') # 满足条件时,跳过用例的执行
def test_a():
     assert True

def test_b():
     assert True

def test_c():
     assert True

def test_d():
     assert True

結果は、

test_code.py::test_a SKIPPED
test_code.py::test_b PASSED
test_code.py::test_c PASSED
test_code.py::test_d PASSED

八。pytest実用プラグイン绍介

pytest兼用できるプラグインが多く、それを満足に自分の要求を満足することができない

(2)多重偶数:pytest—assume

pytestでできるpythonのassertと言い、书も余りと言い、一失敗だが、后ろの断言がもはや政権は

インストールプラグイン:

pip install pytest-assume

使用方法:

def test_simple_assume(x, y):
    pytest.assume(x == y)
    pytest.assume(True)
    pytest.assume(False)

(4)制御用例の執行の順位はpytest—ordering

インストールプラグイン:

pip install pytest-ordering

使用方法:

import pytest

@pytest.mark.run(order=2)
def test_foo():
    assert True

@pytest.mark.run(order=1)
def test_bar():
    assert True

注意:

1 .順位の原理は、まず安照order数字の大きさがすべて執行order添加したテスト用の場合、どおりで例の先着順の執行が

2 .なるべくテスト用の例が顺せ、なるべくテスト用の例に依存せ!

八allureテストを報告。

allureは非常に強力なテスト報告プラグイン、1軒pytest楽の集積できるallure

2 . pythonに使う:

第一歩:必要allure−設置pytest

2歩、結合allure pytest執行テスト用の例:

pytest test_clac.py --alluredir ./allure-result # 会创建一个./allure-result文件夹,里面有许多测试数据的json文件

3歩、読み取りjson文書生成テスト报告

allure generate ./allure-result # 会创建一个allure-report文件,里面有html格式的测试报告
allure generate ./allure-result -o ./allure-report --clean
#  -o ./allure-report:  指定测试报告存放的位置
# --clean  :  清除./allure-result老的json数据,不然生成的报告会有原来的数据

4歩:テストを報告する

allure open allure-report/ #去open整个文件夹,会在本地启动一个web服务,通过访问这个服务,可以查看测试报告

(1) future fifty story、ステップの使用


例:future fiftyとstory登录して、ステップ)

import allure
from selenium import webdriver

@allure.feature('登录模块')
class TestLogin:
    @allure.story('登录成功')
    def test_login_success(self):
        with allure.step('输入用户名'):
            print('输入用户名')
        with allure.step('输入密码'):
            print('输入密码')
        with allure.step('点击登录'):
            print('点击登录')
        assert True

    @allure.story('用户名错误')
    def test_login_username_failed(self):
        with allure.step('输入用户名'):
            print('输入用户名')
        with allure.step('输入密码'):
            print('输入密码')
        with allure.step('点击登录'):
            print('点击登录')
        assert  True

    @allure.story('密码错误')
    def test_login_passwd_failed(self):
        with allure.step('输入用户名'):
            print('输入用户名')
        with allure.step('输入密码'):
            print('输入密码')
        with allure.step('点击登录'):
            print('点击登录')
        assert True

@allure.feature('搜索模块')
class TestSearch:
    @allure.story('精确匹配')
    def test_precise_search(self):
        assert  True

    @allure.story('模糊匹配')
    def test_dim_search(self):
        assert True

端末は執行コード:

1.pytest -vs test_code.py --alluredir=report/testreport2 --allure-features=登录模模块  --allure-stories=用户名错误,密码错误
# pytest -vs test_code.py》》》》执行测试用例文件
# --alluredir=report/testreport2》》》生成初始初始报告,报告位置./alluredir=report/testreport2目录
# --allure-features=登录模模块  --allure-stories=用户名错误,密码错误 》》》只执行登录模块下的‘用户名错误和密码错误’两条测试用例
2.allure generate report/testreport2 --clean
# 解析report/testreport2的初始报告文件,并生成html报告保存在allure-report目录下,如果allure-report目录下已经有之前的报告了,则需要加参数--clean将其清除掉
3.allure open allure-report
# 打开测试报告,会生成一个服务地址,使用浏览器访问即可查看报告

報告書は以下の通り。

我々の定義future fifty、story stepは報告書で、展示がある

まとめ:

future fifty一般用表示大の機能のモジュール、対応class

stroy一般用表示各子機能、対応function

step一般用で例の手続きで、描写を例に執行時の具体的な操作の手続きを

(3) _ _設置用の例の名称


例:_ _

@allure.feature('登录模块')
class TestLogin:
    @allure.title('登录成功用例')
    @allure.story('登录成功')
    def test_login_success(self):
        """
        登录成功测试用例
        :return:
        """
        assert True

    @allure.title('用户名错误用例')
    @allure.story('用户名错误')
    def test_login_username_failed(self):
        """
        登录失败》用户名错误的测试用例
        :return:
        """
        assert  True

    @allure.title('密码错误用例')
    @allure.story('密码错误')
    def test_login_passwd_failed(self):
        """
        登录失败》密码错误的测试用例
        :return:
        """
        assert True

執行用の例:

pytest -vs test_code.py --alluredir=report/testreport3
allure generate report/testreport3 --clean
allure open allure-report

結果は、

まとめ:allure . target修飾関数しか、および用の例に取り别名にしかない。

(5) testcase報告で添加urlをつなぐ

testcase例:

@allure.testcase('www.baidu.com')
def test_text():
     assert True

結果は、

まとめ:

以上がpytestた常用方法で、これらの使用方法を我々がとても便利な管理のテスト用の例。

ソースネットワーク 戻る