# 2.运行多个文件




### 背景

在现实的测试活动中，我们经常会定义多个用例文件，用来实现业务逻辑或其他逻辑上用例的物理分隔，比如

```
login_test.py # 登录相关功能的测试用例
cart_test.py # 购物车相关功能的测试用例
checkout_test.py # 结算相关功能的用例
order_test.py # 订单相关功能的用例
```

使用pytest可以很方便的执行批量执行一组文件中定义的用例。


### 潜规则

在批量执行用例之前，我们需要了解一下pytest的潜规则，注意，由于pytest可以支持丰富的定制选项，下面的潜规则是在**没有定制的默认情况下**的缺省规则

* pytest会找当前以及递查找子文件夹下面所有的```test_*.py```或```*_test.py```的文件，把其当作测试文件
* 在这些文件里，pytest会收集下面的一些函数或方法，当作测试用例
  * 不在类定义中的以```test_```开头的函数或方法
  * 在以```Test```开头的类中(不能包含```__init__```方法)，以```test_```开头的方法
* pytest也支持unittest模式的用例定义

### 实例

新建```test_calc.py```文件，与上一节的```test_quick_start.py```放在同一文件夹下，敲入下面的内容

```python
def add(x, y):
    return x + y

def test_add():
    assert add(1, 0) == 1
    assert add(1, 1) == 2
    assert add(1, 99) == 100
```

现在当前文件夹下应该有2个文件

```
test_calc.py
test_quick_start.py
```

### 运行

在当前文件夹敲下面的命令

```
pytest
```

结果大致应该如下所示

```
$ pytest
========================================================================= test session starts =========================================================================
platform darwin -- Python 2.7.12, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
rootdir: /Users/easonhan/code/testclass.net/src/pytest, inifile:
collected 2 items

test_calc.py .
test_quick_start.py .

====================================================================== 2 passed in 0.01 seconds =======================================================================
```

### 总结

上面的例子里

* 所有以test_开头的py文件都被当成了测试文件
* 所有测试文件中以test开头的方法被当成了测试用例执行




原始封面

![课程图片](https://images.unsplash.com/photo-1443397646383-16272048780e?w=300)


