পাইস্টেস্ট ব্যবহার করে আমি কীভাবে একটি পরীক্ষা অক্ষম করব?


88

ধরা যাক আমার কাছে অনেকগুলি পরীক্ষা আছে:

def test_func_one():
    ...

def test_func_two():
    ...

def test_func_three():
    ...

কেবল কোনও pytestপরীক্ষা চালানো থেকে রোধ করার জন্য কি কোনও সাজসজ্জা বা অনুরূপ কিছু রয়েছে যা আমি ফাংশনগুলিতে যুক্ত করতে পারি ? ফলাফলটির মতো দেখতে কিছুটা ...

@pytest.disable()
def test_func_one():
    ...

def test_func_two():
    ...

def test_func_three():
    ...

উত্তর:


137

পাইস্টে স্কিপ এবং স্কিপিফ সজ্জকার রয়েছে, পাইথন ইউনিটেস্ট মডিউলের মতো (যা ব্যবহার করে skipএবং skipIf), যা এখানে ডকুমেন্টেশনে পাওয়া যায় ।

লিঙ্কের উদাহরণগুলি এখানে পাওয়া যাবে:

@pytest.mark.skip(reason="no way of currently testing this")
def test_the_unknown():
    ...

import sys
@pytest.mark.skipif(sys.version_info < (3,3),
                    reason="requires python3.3")
def test_function():
    ...

প্রথম উদাহরণ সর্বদা পরীক্ষা এড়িয়ে যায়, দ্বিতীয় উদাহরণ আপনাকে শর্তসাপেক্ষে টেস্টগুলি এড়িয়ে যাওয়ার অনুমতি দেয় (দুর্দান্ত যখন টেস্টগুলি প্ল্যাটফর্ম, এক্সিকিউটেবল সংস্করণ বা alচ্ছিক লাইব্রেরির উপর নির্ভর করে।

উদাহরণস্বরূপ, যদি আমি পরীক্ষা করে দেখতে চাই যে কারও কাছে লাইব্রেরির পান্ডাস পরীক্ষার জন্য ইনস্টল করা আছে কিনা।

import sys
try:
    import pandas as pd
except ImportError:
    pass

@pytest.mark.skipif('pandas' not in sys.modules,
                    reason="requires the Pandas library")
def test_pandas_function():
    ...

.skipমোচা (নোড.জেএস) এর মার্জিতগুলির সাথে মিল আছে কি ? it('tests something'...)-> it.skip('tests something'...)যা সেই নির্দিষ্ট পরীক্ষাটিকে অক্ষম করে। এটির কার্যকরী বিপরীতটিও রয়েছে: .onlyযা কেবল সেই পরীক্ষাটি চালাবে এবং অন্য কিছুই নয়।
জুহা আনটিনেন

আমি বলতে চাচ্ছি, জন্য only: পার্ট, আপনি কমান্ড লাইন বা যাই হোক না কেন আপনি পরীক্ষা রানার সূচনাকারী করার জন্য ব্যবহার মাধ্যমে তা করতে পারে stackoverflow.com/a/36539692/4131059 হিসাবে itএবং it.skip, আমি বিশ্বাস করি কার্যকারিতা এখানে সম্পূর্ণরূপে যে জুড়ে।
আলেকজান্ডার হুজাঘ

21

skipপ্রসাধক কাজ হবে:

@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
    # ...

( reasonযুক্তি alচ্ছিক, তবে কেন পরীক্ষা এড়ানো যায় না তা উল্লেখ করা সর্বদা একটি ভাল ধারণা)।

skipif()কিছু নির্দিষ্ট শর্ত পূরণ করা হলে একটি পরীক্ষা অক্ষম করার অনুমতি দেয় এমনও রয়েছে ।


এই সাজসজ্জা পদ্ধতি, ফাংশন বা ক্লাস প্রয়োগ করা যেতে পারে।

করার একটি মডিউল সমস্ত পরীক্ষার লাফালাফি , একটি বিশ্বব্যাপী সংজ্ঞায়িত pytestmarkপরিবর্তনশীল:

# test_module.py
pytestmark = pytest.mark.skipif(...)

10

এটিকে অবমূল্যায়ন করা হয়েছে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে আপনি pytest.skipপরীক্ষার অভ্যন্তরে ফাংশনটিও ব্যবহার করতে পারেন :

def test_valid_counting_number():
     number = random.randint(1,5)
     if number == 5:
         pytest.skip('Five is right out')
     assert number <= 3

4
পাইস্টেস্ট সহায়তার জন্য এসেছিলেন, রেফারেন্সের জন্য থেকেছিলেন
উজেবেকেট্রেন্টে

এটা কি রেফারেন্স না। আমার জানতে হবে
এক্সচিকুএক্স


আমি ভয় করি আমার সময়ের আগে এটি ভাল ছিল। তবে, আমি এখন এটি জেনে আনন্দিত।
এক্সচিকুএক্স

6

আপনি যদি পরীক্ষাটি ব্যর্থ হবেন সন্দেহ করেও আপনি পরীক্ষা চালাতে চাইতে পারেন। এই জাতীয় দৃশ্যের জন্য https://docs.pytest.org/en/latest/skipping.html সাজসজ্জা ব্যবহার করার পরামর্শ দেয় @ pytest.mark.xfail

@pytest.mark.xfail
def test_function():
    ...

এই ক্ষেত্রে, পাইস্টেস্ট এখনও আপনার পরীক্ষা চালাবে এবং এটি পাস হয়ে যায় কিনা তা আপনাকে জানায় তবে অভিযোগ এবং বিল্ডটি ভাঙবে না।


2

আপনি যদি পরীক্ষাটি এড়িয়ে যেতে চান তবে কোনও হার্ড কোডকে কোনও মার্কার নয়, এড়ানোর জন্য কীওয়ার্ড এক্সপ্রেশনটি আরও ভালভাবে ব্যবহার করুন।

pytest test/test_script.py -k 'not test_func_one'

2

আপনি যখন কোনও পরীক্ষা এড়াতে চান তখন আপনি skipআর skipifসজ্জকারদের সাথে একটি পরীক্ষা চিহ্নিত করতে পারেন pytest

একটি পরীক্ষা এড়ানো

@pytest.mark.skip(reason="no way of currently testing this")
def test_func_one():
    ...

একটি পরীক্ষা এড়ানোর সহজ উপায় হ'ল এটি skipডেকরেটারের সাথে চিহ্নিত করা যা anচ্ছিকভাবে পাস হতে পারে reason

pytest.skip(reason)ফাংশনটি কল করে পরীক্ষার সম্পাদনা বা সেটআপের সময় অত্যাবশ্যকভাবে এড়িয়ে যাওয়াও সম্ভব । আমদানির সময় এড়িয়ে যাওয়ার শর্তটি মূল্যায়ন করা সম্ভব না হলে এটি কার্যকর।

def test_func_one():
    if not valid_config():
        pytest.skip("unsupported configuration")

একটি শর্তের ভিত্তিতে একটি পরীক্ষা এড়িয়ে যাওয়া

@pytest.mark.skipif(sys.version_info < (3, 6), reason="requires python3.6 or higher")
def test_func_one():
    ...

আপনি যদি শর্তাধীন ভিত্তিতে এড়াতে চান তবে আপনি skipifপরিবর্তে ব্যবহার করতে পারেন । পূর্ববর্তী উদাহরণে, পাইথন .6..6 এর আগে কোনও দোভাষীর উপর চালানোর সময় পরীক্ষা ফাংশনটি এড়িয়ে যায়।

অবশেষে, আপনি যদি কোনও পরীক্ষা এড়িয়ে যেতে চান কারণ আপনি নিশ্চিত যে এটি ব্যর্থ হচ্ছে, আপনি xfailপরীক্ষাটি ব্যর্থ হওয়ার প্রত্যাশার জন্য চিহ্নিতকারী ব্যবহার করেও বিবেচনা করতে পারেন।

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