#python-3.x #pytest
Вопрос:
Это мой первый раз, когда я использую Pytest, у меня есть программа, которая вызывается с параметрами командной строки, как в :
$ myprog -i value_a -o value_b
Я не уверен, как использовать Pytest для тестирования результатов этой программы. Учитывая значения value_a и value_b, я ожидаю определенного результата, который я хочу протестировать.
Примеры Pytest, которые я вижу, все относятся к функциям тестирования, например, если есть такая функция, как:
import pytest def add_nums(x,y): return x y def test_add_nums(): ret = add_nums(2,2) assert ret == 4
Но я не уверен, как вызвать мою программу с помощью Pytest, а не просто протестировать отдельные функции? Нужно ли мне использовать os.system (), а затем вызывать свою программу таким образом?
В своей программе я использую модуль argparse.
Ответ №1:
Решение основано на приспособлении monkeypatch. В приведенном ниже примере myprog
считывает число из файла myprog_input.txt
, добавляет к нему 2 и сохраняет результат в myprog_output.txt
- Тестируемая программа
cat myprog.py #!/usr/bin/python3.9 import argparse import hashlib def main(): parser = argparse.ArgumentParser(description='myprog') parser.add_argument('-i') parser.add_argument('-o') args = parser.parse_args() with open(args.i) as f: input_data=int(f.read()) output_data=input_data 2 f.close() with open(args.o,"w") as fo: fo.write(str(output_data) 'n') fo.close() with open(args.o) as fot: bytes = fot.read().encode() # read entire file as bytes fot.close() readable_hash = hashlib.sha256(bytes).hexdigest(); return readable_hash if __name__ == '__main__': print(main())
- Тест
cat test_myprog.py #!/usr/bin/python3.9 import sys import myprog def test_myprog(monkeypatch): with monkeypatch.context() as m: m.setattr(sys, 'argv', ['myprog', '-i', 'myprog_input.txt', '-o', 'myprog_output.txt']) assert myprog.main() == 'f0b5c2c2211c8d67ed15e75e656c7862d086e9245420892a7de62cd9ec582a06'
- Входной файл
cat myprog_input.txt 3
- Запуск программы
myprog.py -i myprog_input.txt -o myprog_output.txt f0b5c2c2211c8d67ed15e75e656c7862d086e9245420892a7de62cd9ec582a06
- Тестирование программы
pytest test_myprog.py ============================================= test session starts ============================================= platform linux -- Python 3.9.5, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 rootdir: /home/lt;usernamegt;/py plugins: hypothesis-6.23.1 collected 1 item test_myprog.py . [100%] ============================================== 1 passed in 0.04s ==============================================