公开课 20:00 正式开始
飞儿
形式 | 章节 |
---|---|
知识点 | Pytest 命名规则 |
知识点 | pycharm 配置与界面化运行 |
知识点 | Pytest 测试用例结构 |
知识点 | Pytest 测试用例断言 |
知识点 | Pytest 测试框架结构 |
知识点 | Pytest 运行用例 |
知识点 | Pytest 测试用例调度与运行 |
知识点 | Pytest 命令行常用参数 |
知识点 | Pytest 参数化用例 |
知识点 | Pytest 插件 【进阶】 |
知识点 | Allure2 安装 |
知识点 | Allure2 运行方式 |
知识点 | Allure2 报告生成 |
# src/fight_game.py
# 定义战斗函数
def fight(EZ_hp, EZ_power, Jinx_hp, Jinx_power):
# 定义战斗结果
fight_result = ""
# 定义循环
while True:
# 定义最终血量的计算方式
EZ_hp = EZ_hp - Jinx_power
Jinx_hp = Jinx_hp - EZ_power
# 打印两个英雄的最终血量的值
print(f"EZ 剩余血量为:{EZ_hp}")
print(f"Jinx 剩余血量为:{Jinx_hp}")
# 判断输赢
if EZ_hp > Jinx_hp:
fight_result = "EZ 赢了"
elif EZ_hp < Jinx_hp:
fight_result = "Jinx 赢了"
else:
fight_result = "平局"
# 当某一个英雄的血量小于或者等于 0 时跳出循环
if EZ_hp <= 0 or Jinx_hp <= 0:
# 跳出循环
break
# 返回战斗结果
return fight_result
类型 | 规则 |
---|---|
文件 | test_开头 或者 _test 结尾 |
类 | Test 开头 |
方法/函数 | test_开头 |
注意:测试类中不可以添加__init__ 构造函数 |
# tests/test_xxx.py
def test_XXX(self):
# 测试步骤1
# 测试步骤2
# 断言 实际结果 对比 预期结果
assert ActualResult == ExpectedResult
assert <bool expression>
# tests/test_assert.py
# assert xx :判断 xx 为真
def test_assert_true():
a = 1
assert a
# assert not xx :判断 xx 不为真
def test_assert_false():
a = False
assert not a
# assert a in b :判断 b 包含 a
def test_assert_in():
a = "霍格沃兹测试开发学社"
b = "霍格沃兹"
assert b in a
# assert a == b :判断 a 等于 b
def test_assert_equal():
a = "霍格沃兹测试开发学社"
b = "霍格沃兹测试开发学社"
assert a == b
# assert a != b :判断 a 不等于 b
def test_assert_unequal():
a = "霍格沃兹测试开发学社"
b = "霍格沃兹"
assert a != b
创建 test_fight.py 文件。
# tests/test_fight.py
def test_fight_lose():
# 定义英雄属性
EZ_hp = 1100
EZ_power = 190
Jinx_hp = 1000
Jinx_power = 210
result = fight(EZ_hp, EZ_power, Jinx_hp, Jinx_power)
# 打印战斗结果
print(result)
# 断言战斗结果
assert result == "Jinx 赢了"
pytest
pytest 文件名.py
类型 | 规则 |
---|---|
setup_module/teardown_module | 全局模块级 |
setup_class/teardown_class | 类级,只在类中前后运行一次 |
setup_function/teardown_function | 函数级,在类外 |
setup_method/teardown_method | 方法级,类中的每个方法执行前后 |
# tests/test_setup.py
def setup_module():
print("模块级别的setup")
def teardown_module():
print("模块级别的teardown")
def setup_function():
print("函数级别 setup")
def teardown_function():
print("函数级别 teardown")
def test_func1():
print("测试 func1")
class TestDemo:
def setup_class(self):
print("类级别的setup")
def teardown_class(self):
print("类级别的teardown")
def setup_method(self):
print("方法级别的setup")
def teardown_method(self):
print("方法级别的teardown")
def test_demo1(self):
print("testdemo1")
def test_demo2(self):
print("testdemo2")
@pytest.mark.parametrize
@pytest.mark.parametrize(
"param1, param2",
[["p1_value","p2_value"], ["p1_value1","p2_value1"]]
)
def test_param(param1, param2):
print(param1, param2)
pip install pytest-ordering
@pytest.mark.run(order=2)
# tests/test_order.py
import time
import pytest
value = 0
@pytest.mark.run(order=2)
def test_add2():
print("I am 2")
time.sleep(2)
assert value == 10
@pytest.mark.run(order=1)
def test_add():
global value
value =10
assert value == 10
Allure 是一款灵活的测试报告工具,用 Java 语言开发。它可以生成详尽的测试报告,包括测试类别、步骤、日志、图片等,并生成高水准的统计报告。
Allure 还能轻松集成到 Jenkins 中,生成在线趋势汇总报告。随着软件测试领域的发展,对更清晰、更全面的测试报告需求不断增加,因此 Allure 也备受市场欢迎。
Allure 官网
pip install allure-pytest
。allure --version
--alluredir
参数生成测试报告。# 在测试执行期间收集结果
# —alluredir这个选项 用于指定存储测试结果的路径
pytest [测试用例/模块/包] --alluredir=./results --clean-alluredir
# 生成在线的测试报告
allure serve ./results
# 生成报告,指定输出路径,清理报告。
allure generate --clean results/html results -o results/html