[TOC]
## Pytest参数
### 1:-K EXPRESSION
执行某个关键字的用例
用例要匹配给出的表达式;使用python的语法,匹配的范围是文件名、类名、函数名为变量,用and来区分
如下面一段测试用例
~~~
class TestClass(object):
def test_zne(self):
x = "hello"
assert 'h' in x
def test_two(self):
x = "check"
assert hasattr(x, 'check')
def test_a(self):
assert 1 == 2
~~~
运行pytest时带-k参数
```
pytest -k "test and TestClass and not test_a" pytest_test.py
```
![](https://img.kancloud.cn/2e/cb/2ecb171ae4ff3db634537a6c5e0d6f43_1419x516.png)
可以看出,test\_a这个用例被取消选择了,没有运行了
<br>
<br>
### 2:--maxfail=num
\----maxfail=num 表示用例失败总数等于num 时停止运行
```
pytest --maxfail=1 pytest_test.py
```
![](https://img.kancloud.cn/40/a9/40a9c2f9557fe065f4ff2fc1a6924c84_1411x542.png)
<br>
<br>
### 3:-m MARKEXPR
只能运行有相应标识的测试用例,使用这个参数,测试用例要使用@pytest.mark.marker修饰
如下实例
~~~
import pytest
class TestClass(object):
def test_zne(self):
x = "hello"
assert 'h' in x
def test_two(self):
x = "check"
assert hasattr(x, 'check')
def test_one(self):
assert 1 == 2
@pytest.mark.slow
def test_tow(self):
"""New case"""
num = "word"
assert hasattr(num,"word")
~~~
teste\_two使用了@pytest.mark.slow来修饰
在使用时,使用如下参数
```
pytest -m slow pytest_test.py
```
![](https://img.kancloud.cn/b2/46/b246dc0c2872939bde38596a316952dd_1422x693.png)
从上图中可以看出,只运行了一个我们带有标识的用例。
注意,-m后面不能带''号(单引号),只能带“”(双引号),不然识别不到
如果要运行多个标识的话,用表达式,如下
```
pytest -m "slow or faster" 运行有slow标识或 faster标识用例
pytest -m "slow and faster" 运行有slow和faster标识的用例
pytest -m "slow and not faster" 运行有slow和没有faster标识的用例
```
<br>
<br>
### 4: -v, --verbose
**可以输出用例更加详细的执行信息,如下图**
![](https://img.kancloud.cn/ae/4c/ae4cf32ffa8ac0428d6a3931b8f8a069_1389x707.png)
![](https://img.kancloud.cn/33/0d/330db5eaf96864029c99a336b01eb57c_1386x594.png)
<br>
<br>
### 5:\-q, --quiet
**简化控制台的输出**
<br>
<br>
### 6:\-s
输入我们用例中的调式信息,比如print的打印信息等,我们在用例中加上一句 print(driver.title),我们再运行一下我们的用例看看,调试信息输出
<br>
<br>
### 7:--junit-xml=path
输出xml文件格式,在与jenkins做集成时使用
<br>
<br>
### 8: --result-log=path
将最后的结果保存到本地文件中
注意:标黄的是经常使用的
<br>
<br>
## 四、pytest 用例规则
pytest可以在不同的函数、包中发现用例,发现的规则如下
* 文件名以test\_开头的py文件
* 以test\_开头的函数
* 以Test开头的类
* 以test\_开头的方法(与2类似)
* 要注意的是所有的包必须要有init.py文件(在使用各种编辑器时会自动生成)