জিনকিনসে পাইথন ইউনিটেটস?


135

জেনকিন্স কীভাবে পাইথন ইউনিটেস্টের মামলাগুলি কার্যকর করতে পারেন? অন্তর্নির্মিত unittestপ্যাকেজটি থেকে কি ইউএনটি স্টাইলের এক্সএমএল আউটপুট পাওয়া সম্ভব ?


1
উত্তরগুলির সমস্ত অনুমান করে আপনি কমান্ড-লাইন থেকে পরীক্ষার কেসগুলি শুরু করতে চান। তবে আপনি যদি প্রোগ্রামগুলি প্রোগ্রামটি চালাতে চান তবে এটি ব্যবহার করে দেখুন:import nose ; nose.runmodule() # aka nose.run(defaultTest=__name__)
মার্কহু

1
সাধারণ 'পাইস্টেস্ট - জুনিটেক্সএমএল রেজাল্ট.এক্সএমএল টেস্ট.পি' পরামর্শটি প্রশ্নের উত্তরটি সেরা বলে দেয় question পাই 'টেস্ট ইনস্টল করতে' ইয়াম ইনস্টল পাইস্টেস্ট '। তারপরে আপনি যেকোন ইউনিটেস্ট পাইথন স্ক্রিপ্টটি চালাতে পারেন এবং jUnit xML এর ফলাফল পেতে পারেন
gaoithe

1
@ কেওইথ যা জেনকিন অংশের উত্তর দেয়, তবে বিল্টিন ইউনিটেস্ট মডিউলটি ব্যবহারের প্রয়োজনীয়তা পূরণ করে না। প্রকল্পে এটি একটি প্রদত্ত প্রয়োজনীয়তা ছিল।
এরিকবওয়ার্ক

@ এরিকবি 85 আমি যখন "কোনও ইউনিটেস্ট পাইথন স্ক্রিপ্ট চালান" বলি তখন আমি এমন স্ক্রিপ্ট বলতে বোঝায় যা ইউনিটেস্ট মডিউলটি ব্যবহার করে।
গাইতে

উত্তর:


173

নমুনা পরীক্ষা:

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 = &lt;tests.SimpleTest testMethod=test_fail&gt;

    def test_fail(self):
&gt;       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>

নাক দিয়ে JUnit

এর সাথে পরীক্ষা চালান:

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>

নাক দিয়ে JUnit

আপনার 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>

4
সাধারণ 'পাইস্টেস্ট - জুনিটেক্সএমএল রেজাল্ট.এক্সএমএল টেস্ট.পি' পরামর্শের জন্য +1। পাই 'টেস্ট ইনস্টল করতে' ইয়াম ইনস্টল পাইস্টেস্ট '। তারপরে আপনি যে কোনও ইউনিটেস্ট পাইথন স্ক্রিপ্টটি চালাতে পারেন এবং jUnit xML এর ফলাফল পেতে পারেন।
গাইতে

1
আপনি যদি ইউনিটেস্ট-এক্সএমএল-রিপোর্টিং ব্যবহার করতে চান এবং টেস্ট আবিষ্কারের বৈশিষ্ট্যটি থেকে উপকার পেতে পারেন তবে আপনি রাখতে পারেন unittest.main(module=None, testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
রোজবার্গ লিনহারেস

@ রসবার্গিনহারেস কেন আপনাকে module=Noneটেস্ট আবিষ্কার আবিষ্কার করতে হবে? উত্তরে বর্ণিত ঠিক এটি কাজ করে unittest.main(testRunner=xmlrunner.XMLTestRunner(output='test-reports'))
acm

@ রসবার্গিনহারেস, পরীক্ষার আবিষ্কারের সময়, মডিউলগুলি কেবল আমদানি করা হয় তবে কার্যকর হয় না। সুতরাং, আবিষ্কারগুলির সাথে কীভাবে সমাধানের কাজ করার কথা? আমি কেবল এটি চেষ্টা করে দেখেছি, এর কোনওটিই কাজ করে না। নাকি আমি কিছু মিস করছি?
কনস্টান্টিন

20

আমি দ্বিতীয় নাক ব্যবহার করব। বেসিক এক্সএমএল রিপোর্টিং এখন অন্তর্নির্মিত Just কেবলমাত্র --with-xunit কমান্ড লাইন বিকল্পটি ব্যবহার করুন এবং এটি একটি নাসেস্টেস.এক্সএমএল ফাইল তৈরি করবে। উদাহরণ স্বরূপ:

নাস্তেস্টস - xunit সহ

তারপরে একটি "জুনিত পরীক্ষার ফলাফলের ফলাফল প্রকাশ করুন" পোস্ট বিল্ড অ্যাকশনটি যুক্ত করুন এবং নোটসেটস.এক্সএমএল দিয়ে "টেস্ট রিপোর্ট এক্সএমএলস" ফিল্ডটি পূরণ করুন (ধরে নিবেন যে আপনি tes ওয়ার্কস্পেসে নাকের ছোঁড়া ফেলেছেন)।


11

বিল্ট-ইন-এ এক্সএমএল উত্পন্ন করে এমন একটি রানার যোগ করতে আপনি ইউনিট-এক্সএএমএল-রিপোর্টিং প্যাকেজটি ইনস্টল করতে পারেন unittest

আমরা পাইস্টেস্ট ব্যবহার করি যা এক্সএমএল আউটপুট বিল্ট ইন (এটি একটি কমান্ড লাইন বিকল্প)।

যে কোনও উপায়ে, শেল কমান্ড চালিয়ে ইউনিট পরীক্ষাগুলি সম্পাদন করা যেতে পারে।


4

আমি নস্টিস্ট ব্যবহার করেছি। জেনকিনসের জন্য এক্সএমএল আউটপুট যোগ করার অ্যাডনস রয়েছে



2
python -m pytest --junit-xml=pytest_unit.xml source_directory/test/unit || true # tests may fail

জেনকিন্স থেকে শেল হিসাবে এটি চালান, আপনি পাইটিস্ট_উনিট.এক্সএমএলে আর্টিফ্যাক্ট হিসাবে প্রতিবেদনটি পেতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.