# !/usr/bin/env python
# -*- coding:utf-8 -*-
import pytest
def add(a, b):
return a + b
def test_add_001():
assert add(1, 2) == 2
def test_add_002():
assert add('h', 'i') == 'hi'
def test_add_003():
assert 2 == 3
def add_004():
assert 2 == 2
class TestLogin(object):
def test_login_001(self):
pass
def test_login_002(self):
pass
if __name__ == '__main__':
pytest.main(["-v", "-s", "test_add.py::TestLogin::test_login_002"])
'''
测试类必须以test开头
模块级别的
python -m pytest -v tests/
文件级别
python -m pytest -v tests/文件名
执行具体的测试函数
python -m pytest -v tests/文件名::函数名
执行测试类
python -m pytest -v tests/文件名::类名
执行测试方法
python -m pytest -v tests/文件名::类名::方法
失败立刻停止多用于调试:-x
pytest -v -x -m 分组名
指定失败次数:--maxfail
pytest -v -x --maxfail=2 -m 分组名
--tb=no:关闭信息
pytest -v -x -m 分组名 --tb=no
--tb=short:只输出assert的错误信息
pytest -v -x -m 分组名 --tb=short
--tb=line:一行展示所有的信息,具体分别看如下的信息
pytest -v -x -m 分组名 --tb=line
定位错误:--lf
pytest --lf -m 分组名
遇到错误继续执?:--ff
pytest --ff -m 分组名
忽略执?: -rs
对代码前加入@pytest.mark.skip(reason='忽略执?该测试点')
分组执?:-m -k
k主要是应?测试搜索的?式,?m的?式是使?mark分组的?式。
-s:输出
-k允许你指定希望执行的测试用例
python3 -m pytest -v -k "指定测试用例包含字符" tests/文件名
python3 -m pytest -v -k "指定测试用例包含字符A or 指定测试用例包含字符B" tests/文件名
或者关系,执行A或者B也可均执行
python3 -m pytest -v -k "指定测试用例包含字符A and 指定测试用例包含字符B" tests/文件名
and的关系,两者均执行
'''
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import pytest
@pytest.mark.login
def test_001():
pass
@pytest.mark.logout
def test_exit_001():
pass
@pytest.mark.login
@pytest.mark.logout
def test_002():
pass
@pytest.mark.register
def test_001():
pass
'''
-m允许你指定希望执行的测试用例,以装饰器的形式分组
python3 -m pytest -v -m "指定装饰器包含字符" tests/文件名
python3 -m pytest -v -m "指定装饰器包含字符A or 指定装饰器包含字符B" tests/文件名
或者关系,执行A或者B也可均执行
python3 -m pytest -v -m "指定装饰器包含字符A and 指定装饰器包含字符B" tests/文件名
and的关系,两者均执行
安装pip3 install requests库
测试执行速度:--durations=N
只统计测试过程中那个阶段执行速度是最慢的,如果是--duration=0,它就会按所有阶段耗时从长到短进行排序
直接在文件中执行使用主函数
if __name__ == '__main__':
pytest.main(["-v","-s","文件名"])
'''
# 参数化
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import pytest
import time as t
def add(a, b):
return a + b
@pytest.mark.parametrize('a, b, result', [
(1, 2, 3),
(2, 3, 5),
(3, 4, 7),
('hi ', 'admin', 'hi admin'),
(1.2, 3.4, 4.6)
])
def test_add_many(a, b, result):
assert add(a=a, b=b) == result
@pytest.mark.parametrize('data', [
(1, 2, 3),
(2, 3, 5),
(3, 4, 7),
('hi ', 'admin', 'hi admin'),
(1.2, 3.4, 4.6)
])
def test_add_many(data):
print(data)
assert add(a=data[0], b=data[1]) == data[2]
@pytest.mark.parametrize('username,password,divText', [
('', '', '请输入邮箱名'),
('wuya1303@sina.com', '', '请输入密码'),
('wuya1303@sina.com', 'admin', '登录名或密码错误')
])
def test_sina_login(selenium, username, password, divText):
selenium.maximize_window()
selenium.get('https://mail.sina.com.cn/')
selenium.implicitly_wait(30)
t.sleep(3)
selenium.find_element_by_id('freename').send_keys(username)
selenium.find_element_by_id('freepassword').send_keys(password)
selenium.find_element_by_link_text('登录').click()
t.sleep(3)
errorText = selenium.find_element_by_xpath(
'/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[2]')
assert errorText.text == divText
if __name__ == '__main__':
pytest.main(["-v", "-s", "--driver", "Chrome", "test_params.py"])
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import time as t
import pytest
def test_baidu_title(selenium):
selenium.get('https://www.baidu.com/')
selenium.implicitly_wait(30)
assert selenium.title == '百度一下,你就知道'
def test_baidu_so(selenium):
selenium.get('https://www.baidu.com')
selenium.implicitly_wait(30)
t.sleep(3)
so = selenium.find_element_by_id('kw')
so.send_keys('admin')
t.sleep(3)
assert so.get_attribute('value') == 'admin'
if __name__ == '__main__':
pytest.main(["-v", "-s", "--driver", "Chrome", "test_ui.py"])