受け入れテストケースがあり、結果はプレーンテキストです。Jenkinsを使用して結果を表示したいのですが、JUnit形式が適しています。
そこで、JUnit形式のXMLを生成するための既存のPythonコードがあるかどうかを確認して、解析コードを簡単に追加できるようにします。
上記のCoreyはjunitxmlを提案しましたが、Pythonコードをテストするための単体テストを作成していないという点で、私はlarrycaiと同じボートにいました。私はブラックボックスシステムテストを行うためのPythonスクリプトを書いていますが、車輪の再発明をせずにJUnitXMLで結果を出力したかっただけです。
上記のlarrycaiによって提案されたDavidBlackの「pythonjunitxml出力モジュール」を簡単に調べましたが、最終的には別の同様のパッケージを使用することになりました。私はこれを試しただけなのでどちらが良いかわかりませんが、それは私にとって非常にうまく機能することになりました。
1文字だけ異なりますが、パッケージは「junit-xml」です: https ://pypi.python.org/pypi/junit-xml/1.0
注意してください...彼のreadmeの例にはエラーがあり、機能しません。github(pypiページに含まれているgithubリンク)でエラーを報告しました。彼の「prettyprint」引数処理にもバグがありますが、私が修正を含めたgithubで報告した問題#3を紹介します。ソースをダウンロードすると、彼のtest.py単体テストを見ることができますが、ここにいくつかの例(Python 3.3を使用)でテスト/実験した私のテストスクリプトもあります。
#junit-xml 1.0 downloaded from https://pypi.python.org/pypi/junit-xml
from junit_xml import TestSuite, TestCase
#Good article that has examples of how Jenkins parses JUnit XML to display output:
#http://nelsonwells.net/2012/09/how-jenkins-ci-parses-and-displays-junit-output/
#One version of JUnit XML schema: http://windyroad.org/dl/Open%20Source/JUnit.xsd
def testBasicToConsole():
''' Perform the very basic test with 1 suite and 1 test case, output to console.
This is the example from the above referenced pypi webpage, but corrected to
actually work.
'''
test_cases = [TestCase('Test1', 'some.class.name', 123.345, 'I am stdout!', 'I am stderr!')]
ts = [TestSuite("my test suite", test_cases)]
# pretty printing is on by default but can be disabled using prettyprint=False
print(TestSuite.to_xml_string(ts, prettyprint=False))
def testBasicInfoToConsole():
''' Actually, even more basic than the test above, with classname, stdout, and stderror
removed to demonstrate they are optional. For system testing we often won't use them.
Output to console.
'''
test_cases = [TestCase('PathCheck: ApplicationControl', '', .0523, '', '')]
ts = [TestSuite("DirectorITG2", test_cases)]
# pretty printing is on by default but can be disabled using prettyprint=False
print(TestSuite.to_xml_string(ts))
def testFailureInfoToConsole():
''' 1 suite and test case with failure info added. Output to console.
'''
test_cases = TestCase('FileCheck: DesktopNotificationCenter', '', .0451, '', '')
test_cases.add_failure_info('Invalid File \'DNC.exe\'.')
ts = [TestSuite("DirectorITG2", [test_cases])]
# pretty printing is on by default but can be disabled using prettyprint=False
print(TestSuite.to_xml_string(ts))
def testMultiTestCasesToConsole():
''' Demonstrates a single test suite with multiple test cases, one of which
has failure info. Output to console.
'''
test_cases = [TestCase('FileCheck: DesktopNotificationCenter', '', .0451, '', '')]
test_cases.append(TestCase('FileCheck: PropertyServer', '', .0452, '', ''))
test_cases[0].add_failure_info('Invalid File \'DNC.exe\'.')
ts = [TestSuite("DirectorITG2", test_cases)]
# pretty printing is on by default but can be disabled using prettyprint=False
print(TestSuite.to_xml_string(ts))
def testMultiTestSuitesToConsole():
''' Demonstrates adding multiple test suites. Output to console.
'''
test_cases = [TestCase('FileCheck: DesktopNotificationCenter', '', .0451, '', '')]
ts = [TestSuite("FileChecks", test_cases)]
ts.append(TestSuite("ProcessChecks", [TestCase('ProcessCheck: ApplicationControl', '', 1.043, '', '')]))
# pretty printing is on by default but can be disabled using prettyprint=False
print(TestSuite.to_xml_string(ts))
def testMultiTestCasesToFile():
''' Demonstrates a single test suite with multiple test cases, one of which
has failure info. Output to a file with PrettyPrint disabled (Jenkins-friendly).
'''
test_cases = [TestCase('DesktopNotificationCenter', 'Integration.FileCheck', .0451, '', '')]
test_cases.append(TestCase('PropertyServer', 'Integration.FileCheck', .5678, '', ''))
test_cases[0].add_failure_info('Invalid File \'DNC.exe\'.')
ts = [TestSuite("GII_2013_R1", test_cases)]
# open the file, then call the TestSuite to_File function with prettyprint off.
# use raw text here to protect slashes from becoming escape characters
with open(r'C:\Users\Administrator\.jenkins\workspace\IntegrationTests\FileCheck.xml', mode='a') as lFile:
TestSuite.to_file(lFile, ts, prettyprint=False)
lFile.close()
if __name__ == '__main__':
''' If this module is being run directly, run all of the example test functions.
Test functions output JUnit XML for various scenarios to either screen (Console)
or file.
'''
testBasicToConsole()
# testBasicInfoToConsole()
# testFailureInfoToConsole()
# testMultiTestCasesToConsole()
# testMultiTestSuitesToConsole()
# testMultiTestCasesToFile()
else:
''' Function calls for an external run of this script.
'''
testMultiTestCasesToFile()
使用できますjunitxml
(Python JUnit XMLレポーター)
PyPIの場合:http://pypi.python.org/pypi/junitxml
unittest
と呼ばれる標準のテストスイートがある場合suite
。これを実行して、次のように結果をxmlファイルに書き込むことができます。
import junitxml
fp = file('results.xml', 'wb')
result = junitxml.JUnitXmlResult(fp)
result.startTestRun()
TestSuite(suite).run(result)
result.stopTestRun()
または、テストを検出してxmlをstdoutに出力します。
python -m junitxml.main discover
別のオプションはnose
、スイートを使用して実行することです。
nosetests --with-xunit
collective.recipe.xmltestreport
ビルドアウトレシピパッケージはまさにこれを行います。テストランナーの出力を受け取り、JUnitに適したXMLファイルを作成します。ただし、これはビルドアウト固有であり、zope.testrunner
テストランナーパッケージを使用します。
ビルドアウトに切り替えることができない場合は、そのソースコードを調べて、重要な部分を抽出することができます。
1つのPythonモジュールhttps://bitbucket.org/db_atlass/python-junit-xml-output-module/が見つかりましたが、私のニーズに合っているようです。そこにthxデビッドブラック
# code snippet for the usage
""" a short example of how to use this module """
test_cases = []
for i in range(0, 5):
type_c = ""
if i % 2 == 0:
type_c = "failure"
test_cases.append(TestCase(i, str(i) + "contents", type_c) )
junit_xml = JunitXml("demo test example", test_cases)
ここで、githubhttps://github.com/kyrus/python-junit-xmlから別のパッケージを入手しました
ここでの良い答え:(それを行うには多くの方法があります) JenkinsでのPythonユニットテスト?
IMHOの最善の方法は、python unittestテストを記述し、 pytest('yum install pytest'など)をインストールしてpy.testをインストールすることです。次に、次のようなテストを実行します:'py.test --junitxmlresults.xmltest.py'。任意のunittestpythonスクリプトを実行して、jUnitxmlの結果を取得できます。
https://docs.python.org/2.7/library/unittest.html
jenkinsビルド構成でビルド後のアクションresult.xmlおよび作成したその他のテスト結果ファイルを使用して「JUnitテスト結果レポートの公開」アクションを追加します。