Pytest实战例子

#conftest.py
import pytest


@pytest.fixture()
def login():
    print('登陆了')
image.png

例子1:


import pytest

@pytest.fixture(scope="module", autouse=True)
def open_browser():
    print("\n打开浏览器,打开百度首页")

    yield

    print('执行teardown')

    print('最后关闭浏览器')


def test_soso(login):

    print('case1: 登际后执行搜索')

def test_cakan():

    print('case2:不登陆就看')

def test_cart(login):

    print('case3,登陆,加购物车')

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

test_fixture.png

例子2:


import pytest


@pytest.fixture()
def open_browser():
    print("\n打开浏览器,打开百度首页")

    yield

    print('执行teardown')
    print('最后关闭浏览器')


@pytest.mark.usefixtures('open_browser')
def test_soso():
    print('case1: 登际后执行搜索')


def test_cakan():
    print('case2:不登陆就看')


@pytest.mark.usefixtures('open_browser')
def test_cart():
    print('case3,登陆,加购物车')


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



image.png

例子3:

#test_fixture_assert_skip_01.py
import pytest
import sys
# 默认 scope=function


def test_soso(login):
    print('case1: 登际后执行搜索')
    assert 1 == 1
    assert {'name': 'linda', 'age': 18} == {'name': 'linda', 'age': 188}
    a = 'hello'
    age = 35
    assert a in 'hello world'
    assert 20 < age < 80


def f():
    return 3


@pytest.mark.skip
def test_cakan():
    print('case2:不登陆就看')
    assert f() == 4


environment = 'android'


@pytest.mark.skipif('environment=="android"', reason='android平台没有这个功能')
def test_cart_3(login):
    print('case3,登陆,点击苹果图标')


@pytest.mark.skipif(sys.platform =='win32', reason='不在windows下运行')
@pytest.mark.skipif(sys.version_info < (3,6), reason='3.6版本以下不执行,您需要更高版本')
def test_cart(login):
    print('case3,登陆,点击苹果图标,3.6以下版本无法执行')


@pytest.mark.xfail
def test_xfail():
    print(broken_fixture())


def broken_fixture():
    raise Exception("Sorry, it's 中断异常.")

if __name__ == '__main__':
    pytest.main(['-s','test_fixture_assert_skip_01.py'])
image.png

image.png

image.png

image.png

image.png

例子4:

import pytest


test_user_data = ["linda", "servenruby"]


@pytest.fixture(params=test_user_data)
def login_r(request):
    user = request.param
    print("\n打开首页准备登陆,登陆用户:%s" % user)
    return user


def test_login_s(login_r):
    print(login_r)


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

image.png

例子5:

import pytest


@pytest.fixture()
def start():
    print("\n----begin-登陆--")


def test_soso():
    print('\ncase1: 登际后执行搜索')


def test_cakan():
    print('\ncase2:不登陆就看')


def test_cart():
    print('\ncase3,登陆,加购物车')


def test_quit():
    print('case3,登陆,退出')
if __name__ == '__main__':
    pytest.main(['-s','-v','test_fixture_usefixtures_05.py'])
image.png

例子6:

import pytest


# 参数化,前面两个变量,后面是对应的数据;3+5--->test_input,8-->expected
@pytest.mark.parametrize("test_input,expected",[("3+5", 8),
                                                ("2+5", 7),
                                                ("7*5", 30),
                                                ])
def test_eval(test_input, expected):
    # eval将字符串str当成有效的表达式来求值并返回计算结果
    assert eval(test_input) == expected


if __name__ == '__main__':
    pytest.main()
image.png

例子7:

import pytest


test_user_data = ["linda", "servenruby"]


@pytest.fixture(scope="module")
def login_r(request):
    # 这是接收传入的参数,接收一个参数
    user = request.param
    print("\n打开首页准备登陆,登陆用户:%s" % user)
    return user


# 这是pytest的参数化数据驱动,indirect=True 是把login_r当作函数去执行
@pytest.mark.parametrize("login_r", test_user_data, indirect=True)
def test_login(login_r):
    # 登陆用例
    a = login_r
    print(test_user_data)
    print("测试用例中login的返回值:%s" % a)
    assert a != ""

image.png

例子8:

import pytest


test_user_data = [{"user": "linda", "password": "888888"},
                  {"user": "servenruby", "password": "123456"},
                  {"user": "test01", "password": ""}]


@pytest.fixture(scope="module")
def login_r(request):
    # 可以通过dict形式,虽然传递一个参数,但通过key的方式可以达到类似传入多个参数的效果
    user = request.param['user']
    pwd = request.param['password']

    print("\n打开首页准备登陆,登陆用户:%s,密码:%s" % (user, pwd))
    if pwd:
        return True
    else:
        return False


# 这是pytest的参数化数据驱动,indeirect=True 是把login_r当作函数去执行
@pytest.mark.parametrize("login_r", test_user_data, indirect=True)
def test_login(login_r):
    # 登陆用例
    a = login_r
    print("测试用例中login的返回值:%s" % a)
    assert a, "失败原因:密码为空"

image.png

例子9:

import pytest

test_user_data1 = [{"user": "linda", "password": "888888"},
                  {"user": "servenruby", "password": "123456"},
                  {"user": "test01", "password": ""}]

test_user_data2 = [{"q": "中国平安", "count": 3, "page": 1},
                  {"q": "阿里巴巴", "count": 2, "page": 2},
                  {"q": "pdd", "count": 3, "page": 1}]


@pytest.fixture(scope="module")
def login_r(request):
    # 这是接收传入的参数,接收一个参数
    user = request.param['user']
    password = request.param['password']

    print("\n用户名:%s,密码:%s" % (user, password))


@pytest.fixture(scope="module")
def query_param(request):
    q = request.param['q']
    count = request.param['count']
    page = request.param['page']
    print("查询的搜索词:%s" % q)
    return request.param


# 这是pytest的参数化数据驱动,indeirect=True 是把login_r当作函数去执行
# 从下往上执行
# 两个数据进行组合测试有3*3个测试用例执行(test_user_data1的个数*test_user_data2的个数)
@pytest.mark.parametrize("query_param", test_user_data2, indirect=True)
@pytest.mark.parametrize("login_r", test_user_data1, indirect=True)
def test_login(login_r, query_param):
    # 登陆用例
   print(login_r)
   print(query_param)



例子10:

import pytest

test_user_data1 = [{"user": "linda", "password": "888888"},
                  {"user": "servenruby", "password": "123456"},
                  {"user": "test01", "password": ""}]

test_user_data2 = [{"q": "中国平安", "count": 3, "page": 1},
                  {"q": "阿里巴巴", "count": 2, "page": 2},
                  {"q": "pdd", "count": 3, "page": 1}]


@pytest.fixture(scope="module")
def login_r(request):
    # 这是接收传入的参数,接收一个参数
    user = request.param['user']
    password = request.param['password']

    print("\n用户名:%s,密码:%s" % (user, password))


@pytest.fixture(scope="module")
def query_param(request):
    q = request.param['q']
    count = request.param['count']
    page = request.param['page']
    print("查询的搜索词:%s" % q)
    return request.param


# 这是pytest的参数化数据驱动,indeirect=True 是把login_r当作函数去执行
# 从下往上执行
# 两个数据进行组合测试有3*3个测试用例执行(test_user_data1的个数*test_user_data2的个数)
@pytest.mark.parametrize("query_param", test_user_data2, indirect=True)
@pytest.mark.parametrize("login_r", test_user_data1, indirect=True)
def test_login(login_r, query_param):
    # 登陆用例
   print(login_r)
   print(query_param)


image.png

例子11:

import pytest


@pytest.mark.webtest
def test_send_http():
    pass


@pytest.mark.apptest
def test_devide():
    pass


@pytest.mark.android
def test_search():
    pass


@pytest.mark.ios
def test_add():
    pass


def test_plus():
    pass


if __name__ == '__main__':
    pytest.main()

image.png

例子12:

import pytest


def test_01():
    print('test01')


@pytest.mark.last
def test_02():
    print('test02')
    assert(4==1)


@pytest.mark.skip
def test_03():
    print('test03')


@pytest.mark.run(order=1)
def test_04():
    print('test04')
    # assert(4==1)

image.png

例子13:

import time
import random


def test_rerun():
    time.sleep(1)
    a = random.randint(1, 3)
    print(a)
    assert 3 == a

image.png

例子14:

import pytest


@pytest.mark.parametrize(('x', 'y'), [(1, 1), (1, 0), (0, 1)])
def test_simple_assume(x, y):
    pytest.assume(x == y)
    pytest.assume(True)
    pytest.assume(False)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容