系列文章目录
一、pytest使用
1. 测试function
- ETL伪代码
import pandas as pd
def add(a, b):
return a + b
# Function to load the CSV
def load_data(file_name):
data = pd.read_csv(file_name)
return data
# Function to clean the data
def clean_data(data):
data = data.dropna()
return data
- 创建测试文件,在
test/common/test_etl_process.py
2. 测试普通方法
- 这里我们测试
add()
方法
def test_add():
assert add(1,2) ==3
assert add(2,5) == 7
- 运行
pytest -v
3. 添加测试数据急
- 在测试数据时,我们需要将测试数据集加载
@pytest.fixture
def make_fake_csv_file(tmp_path):
df = pd.read_csv('data_test_sample.csv') # Load the sample data
file_path = tmp_path / "data.csv" # create a temporary test file path
df.to_csv(file_path, index=False) # Save the sample data to the temporary file
return file_path # Return the temporary file path
- 根据后面的程序,return,由于下面程序需要一个文件路径,所以这里返回的文件路径;
- 如果后面程序需要使用返回值,直接使用function名传递给下面的程序当参数
- 需要传递给下一个方法测试的,都需要添加@pytest.fixture
4. 测试load_data
- 从etl的代码得知,
load_data
需要传递的是一个file_path
,而我们也将测试数据集的path返回了出来
@pytest.fixture
def test_load_data(make_fake_csv_file):
data = load_data(make_fake_csv_file)
assert not data.empty
assert list(data.columns) == ['id','name', 'age'] #测试列明是否相等
assert data.shape[0] == 61 # 测试行是否是61行
return data
需要将加载后的数据传递给下一个clean_data,所以使用了@pytest.fixture
5. 测试clean_data
- 直接使用 test_load_data里返回的数据
def test_clean_data(test_load_data):
df = clean_data(test_load_data)
df = df.dropna()
assert df.isnull().sum().sum() == 0 # Should have no missing values