জেনকিন্স কীভাবে পাইথন ইউনিটেস্টের মামলাগুলি কার্যকর করতে পারেন? অন্তর্নির্মিত unittest
প্যাকেজটি থেকে কি ইউএনটি স্টাইলের এক্সএমএল আউটপুট পাওয়া সম্ভব ?
জেনকিন্স কীভাবে পাইথন ইউনিটেস্টের মামলাগুলি কার্যকর করতে পারেন? অন্তর্নির্মিত unittest
প্যাকেজটি থেকে কি ইউএনটি স্টাইলের এক্সএমএল আউটপুট পাওয়া সম্ভব ?
উত্তর:
tests.py:
# tests.py
import random
try:
import unittest2 as unittest
except ImportError:
import unittest
class SimpleTest(unittest.TestCase):
@unittest.skip("demonstrating skipping")
def test_skipped(self):
self.fail("shouldn't happen")
def test_pass(self):
self.assertEqual(10, 7 + 3)
def test_fail(self):
self.assertEqual(11, 7 + 3)
এর সাথে পরীক্ষা চালান:
py.test --junitxml results.xml tests.py
results.xml:
<?xml version="1.0" encoding="utf-8"?>
<testsuite errors="0" failures="1" name="pytest" skips="1" tests="2" time="0.097">
<testcase classname="tests.SimpleTest" name="test_fail" time="0.000301837921143">
<failure message="test failure">self = <tests.SimpleTest testMethod=test_fail>
def test_fail(self):
> self.assertEqual(11, 7 + 3)
E AssertionError: 11 != 10
tests.py:16: AssertionError</failure>
</testcase>
<testcase classname="tests.SimpleTest" name="test_pass" time="0.000109910964966"/>
<testcase classname="tests.SimpleTest" name="test_skipped" time="0.000164031982422">
<skipped message="demonstrating skipping" type="pytest.skip">/home/damien/test-env/lib/python2.6/site-packages/_pytest/unittest.py:119: Skipped: demonstrating skipping</skipped>
</testcase>
</testsuite>
এর সাথে পরীক্ষা চালান:
nosetests --with-xunit
nosetests.xml:
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="nosetests" tests="3" errors="0" failures="1" skip="1">
<testcase classname="tests.SimpleTest" name="test_fail" time="0.000">
<failure type="exceptions.AssertionError" message="11 != 10">
<![CDATA[Traceback (most recent call last):
File "/opt/python-2.6.1/lib/python2.6/site-packages/unittest2-0.5.1-py2.6.egg/unittest2/case.py", line 340, in run
testMethod()
File "/home/damien/tests.py", line 16, in test_fail
self.assertEqual(11, 7 + 3)
File "/opt/python-2.6.1/lib/python2.6/site-packages/unittest2-0.5.1-py2.6.egg/unittest2/case.py", line 521, in assertEqual
assertion_func(first, second, msg=msg)
File "/opt/python-2.6.1/lib/python2.6/site-packages/unittest2-0.5.1-py2.6.egg/unittest2/case.py", line 514, in _baseAssertEqual
raise self.failureException(msg)
AssertionError: 11 != 10
]]>
</failure>
</testcase>
<testcase classname="tests.SimpleTest" name="test_pass" time="0.000"></testcase>
<testcase classname="tests.SimpleTest" name="test_skipped" time="0.000">
<skipped type="nose.plugins.skip.SkipTest" message="demonstrating skipping">
<![CDATA[SkipTest: demonstrating skipping
]]>
</skipped>
</testcase>
</testsuite>
আপনার nose2.plugins.junitxml
প্লাগইনটি ব্যবহার করা দরকার । আপনি nose2
একটি কনফিগার ফাইল দিয়ে কনফিগার করতে পারেন যেমন আপনি সাধারণত করেন বা এর সাথে করেন--plugin
কমান্ড-লাইন বিকল্পের সাহায্যে।
এর সাথে পরীক্ষা চালান:
nose2 --plugin nose2.plugins.junitxml --junit-xml tests
nose2-junit.xml:
<testsuite errors="0" failures="1" name="nose2-junit" skips="1" tests="3" time="0.001">
<testcase classname="tests.SimpleTest" name="test_fail" time="0.000126">
<failure message="test failure">Traceback (most recent call last):
File "/Users/damien/Work/test2/tests.py", line 18, in test_fail
self.assertEqual(11, 7 + 3)
AssertionError: 11 != 10
</failure>
</testcase>
<testcase classname="tests.SimpleTest" name="test_pass" time="0.000095" />
<testcase classname="tests.SimpleTest" name="test_skipped" time="0.000058">
<skipped />
</testcase>
</testsuite>
নিম্নলিখিত যুক্ত করুন tests.py
if __name__ == '__main__':
import xmlrunner
unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
এর সাথে পরীক্ষা চালান:
python tests.py
পরীক্ষা রিপোর্ট / পরীক্ষা SimpleTest-20131001140629.xml:
<?xml version="1.0" ?>
<testsuite errors="1" failures="0" name="SimpleTest-20131001140629" tests="3" time="0.000">
<testcase classname="SimpleTest" name="test_pass" time="0.000"/>
<testcase classname="SimpleTest" name="test_fail" time="0.000">
<error message="11 != 10" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "tests.py", line 16, in test_fail
self.assertEqual(11, 7 + 3)
AssertionError: 11 != 10
]]> </error>
</testcase>
<testcase classname="SimpleTest" name="test_skipped" time="0.000">
<skipped message="demonstrating skipping" type="skip"/>
</testcase>
<system-out>
<![CDATA[]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testsuite>
unittest.main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
।
module=None
টেস্ট আবিষ্কার আবিষ্কার করতে হবে? উত্তরে বর্ণিত ঠিক এটি কাজ করে unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
।
আমি দ্বিতীয় নাক ব্যবহার করব। বেসিক এক্সএমএল রিপোর্টিং এখন অন্তর্নির্মিত Just কেবলমাত্র --with-xunit কমান্ড লাইন বিকল্পটি ব্যবহার করুন এবং এটি একটি নাসেস্টেস.এক্সএমএল ফাইল তৈরি করবে। উদাহরণ স্বরূপ:
নাস্তেস্টস - xunit সহ
তারপরে একটি "জুনিত পরীক্ষার ফলাফলের ফলাফল প্রকাশ করুন" পোস্ট বিল্ড অ্যাকশনটি যুক্ত করুন এবং নোটসেটস.এক্সএমএল দিয়ে "টেস্ট রিপোর্ট এক্সএমএলস" ফিল্ডটি পূরণ করুন (ধরে নিবেন যে আপনি tes ওয়ার্কস্পেসে নাকের ছোঁড়া ফেলেছেন)।
বিল্ট-ইন-এ এক্সএমএল উত্পন্ন করে এমন একটি রানার যোগ করতে আপনি ইউনিট-এক্সএএমএল-রিপোর্টিং প্যাকেজটি ইনস্টল করতে পারেন unittest
।
আমরা পাইস্টেস্ট ব্যবহার করি যা এক্সএমএল আউটপুট বিল্ট ইন (এটি একটি কমান্ড লাইন বিকল্প)।
যে কোনও উপায়ে, শেল কমান্ড চালিয়ে ইউনিট পরীক্ষাগুলি সম্পাদন করা যেতে পারে।
বিল্ডআউট ব্যবহার collective.xmltestreport
করার সময় আমরা JUnit- শৈলীর এক্সএমএল আউটপুট উত্পাদন করতে ব্যবহার করি , সম্ভবত এটির সোর্স কোড বা মডিউলটি নিজেই সহায়ক হতে পারে।
python -m pytest --junit-xml=pytest_unit.xml source_directory/test/unit || true # tests may fail
জেনকিন্স থেকে শেল হিসাবে এটি চালান, আপনি পাইটিস্ট_উনিট.এক্সএমএলে আর্টিফ্যাক্ট হিসাবে প্রতিবেদনটি পেতে পারেন।
import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)