【分享】学习 pytest 中犯的一些错

一、pytest.fixture 参数化的问题

  • conftest.py

@pytest.fixture()
def abc():
	print("我是公共函数")
  • test_abc.py

# 错误的调用方法
abc()
# 正确的调用方法
def test_case(abc):
	assert 1 = 1
  • 注意:这个公共文件一定不能命名错了,必须为 “conftest.py”

  • 必须放到项目的根目录



二、pytest.ini 问题

  • 我的是 Win 系统,ini 里面不能带中文,否则脚本会报错(Linux、Mac没有这个问题)
  • 这是由于编码问题导致,如果必须要带中文怎么办?
  • 解决办法①:将 ini 文件编码改为 ANSI
  • 解决办法②:修改 pytest 读取 ini 部分的源码, 改成用 utf-8 编码读取


三、allure.attach 插入图片问题

  • 错误的插入方式

@allure.feature("插入图片")
def test_img():
    allure.attach("./data/1.png", name="这是一张图片", attachment_type=allure.attachment_type.PNG)
  • 正确的插入方式,要加上 file

@allure.feature("插入图片")
def test_img():
    allure.attach.file("./data/1.png", name="这是一张图片", attachment_type=allure.attachment_type.PNG)


四、dict.get(key) 与 dict[key] 有什么区别?

  • 正常情况下这两者没有区别

  • 如果key不存在,dict.get(key) 返回空值,dict[key] 直接报错

  • 所有一般情况下建议用 dict.get(key) 取值



五、为什么用 open 的时候要带 with 关键字?

  • 用 open 时不加 with 就必须使用 close 方法

f = open("1.txt")
print(f.readlines())
f.close()
  • 用 open 时加 with 就不需要在加上 close 方法(其内部会自动调用)

with open("1.txt") as f:
	print(f.readlines())
1 Like

with 工作原理
(1)紧跟with后面的语句被求值后,返回对象的“–enter–()”方法被调用,这个方法的返回值将被赋值给as后面的变量;
(2)当with后面的代码块全部被执行完之后,将调用前面返回对象的“–exit–()”方法。