pytest測試用例編寫----參數化測試(Parametrized Tesing)


 1 def test_add_1():
 2     """tasks.get() using id returned from add() works."""
 3     task = Task('breathe', 'BRIAN', True)
 4     task_id = tasks.add(task)
 5     t_from_db = tasks.get(task_id)
 6     # everything but the id should be the same
 7     assert equivalent(t_from_db, task)
 8 
 9 
10 def equivalent(t1, t2):
11     """Check two tasks for equivalence."""
12     # Compare everything but the id field
13     return ((t1.summary == t2.summary) and
14             (t1.owner == t2.owner) and
15             (t1.done == t2.done))
16 
17 
18 @pytest.fixture(autouse=True)
19 def initialized_tasks_db(tmpdir):
20     """Connect to db before testing, disconnect after."""
21     tasks.start_tasks_db(str(tmpdir), 'tiny')
22     yield
23     tasks.stop_tasks_db()

1.新建的Task對象,其id會被置為None,只有在發生數據庫交互之后其id才會被填入相應的值。

2.equivalent()方法檢查id之外的所有屬性是否相等

3.autouse的fixture能確保數據庫可訪問

運行結果:

 

 @pytest.mark.parametrize(argnames, argvalues)裝飾器達到批量傳送參數的目的

 1 @pytest.mark.parametrize('task',
 2                          [Task('sleep', done=True),
 3                           Task('wake', 'brian'),
 4                           Task('breathe', 'BRIAN', True),
 5                           Task('exercise', 'BrIaN', False)])
 6 def test_add_2(task):
 7     """Demonstrate parametrize with one parameter."""
 8     task_id = tasks.add(task)
 9     t_from_db = tasks.get(task_id)
10     assert equivalent(t_from_db, task)

parametrize()的第一個參數是用逗號分隔的字符串列表'task';第二個參數是一個值列表‘Task對象列表’,pytest會對每個task做測試,並分別報告每一個測試用例結果。

 

 將parametrize()的task對象列表替換為幾組鍵值對

 1 @pytest.mark.parametrize('summary, owner, done',
 2                          [('sleep', None, False),
 3                           ('wake', 'brian', False),
 4                           ('breathe', 'BRIAN', True),
 5                           ('eat eggs', 'BrIaN', False),
 6                           ])
 7 def test_add_3(summary, owner, done):
 8     """Demonstrate parametrize with multiple parameters."""
 9     task = Task(summary, owner, done)
10     task_id = tasks.add(task)
11     t_from_db = tasks.get(task_id)
12     assert equivalent(t_from_db, task)

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM