是否可以使用Pytest运行Robot Framework的单元测试?

时间:2017-06-26 07:22:34

标签: python unit-testing robotframework pytest python-unittest

Robot Framework有一个great set of unit tests,使用Python unittest module实现。我想知道这些测试是否可以用Pytest运行,如果有人已经尝试过这样做的话。至少Pytest's docu says that it can deal with regular Python unittest

编辑:更准确。我想用Pytest而不是Python的单元测试模块运行Robot自己超过1000个单元测试。例如。现在你必须在RF的repo的python run.py文件夹中运行utest来执行所有单元测试。所以我实际要求的是如何修改run.py以便它使用Pytest框架而不是单元测试框架?

我认为最棘手的部分是:

if __name__ == '__main__':
    docs, vrbst = parse_args(sys.argv[1:])
    tests = get_tests()
    suite = unittest.TestSuite(tests)
    runner = unittest.TextTestRunner(descriptions=docs, verbosity=vrbst)
    result = runner.run(suite)
    rc = len(result.failures) + len(result.errors)
    if rc > 250:
        rc = 250
    sys.exit(rc)

特别:

suite = unittest.TestSuite(tests)
runner = unittest.TextTestRunner(descriptions=docs, verbosity=vrbst)

我已经可以通过将pytest指向具体的测试文件来运行单个测试,例如pytest utest/api/test_exposed_api.py。但是,如果我尝试使用utestpytest utest/文件夹中运行所有单元测试,我只会收到错误和警告:(

1 个答案:

答案 0 :(得分:2)

简答:是的! :)))

答案很长:我必须在run.py中只编辑两行,并且对结果非常满意

  1. import pytest
  2. 下方添加import unittest
  3. 编辑if __name__ == '__main__':部分,使其看起来像:

    if __name__ == '__main__':
        docs, vrbst = parse_args(sys.argv[1:])
        tests = get_tests()
        pytest.main()
    
  4. 然后在utest文件夹中调用python run.py并运行测试:)))

        1532 passed, 45 warnings, 1 error in 9.70 seconds
    

    显然在run.py中有更多的东西对于pytest是不必要的并且可以被删除......但是我没有python专家(还)