Làm cách nào để chạy thử nghiệm đơn lẻ với Mũi trong giá treo


152

Tôi có một ứng dụng Pylons 1.0 với một loạt các bài kiểm tra trong thư mục test / function. Tôi nhận được kết quả kiểm tra kỳ lạ và tôi muốn chỉ chạy một thử nghiệm. Tài liệu về mũi nói rằng tôi sẽ có thể vượt qua một tên kiểm tra tại dòng lệnh nhưng tôi nhận được Nhập khẩu cho dù tôi có làm gì đi nữa

Ví dụ:

nosetests -x -s sometestname

Cung cấp:

Traceback (most recent call last):
  File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/loader.py", line 371, in loadTestsFromName
   module = resolve_name(addr.module)
  File "/home/ben/.virtualenvs/tsq/lib/python2.6/site-packages/nose-0.11.4-py2.6.egg/nose/util.py", line 334, in resolve_name
   module = __import__('.'.join(parts_copy))
ImportError: No module named sometestname

Tôi nhận được cùng một lỗi cho

nosetests -x -s appname.tests.functional.testcontroller

Cú pháp đúng là gì?

Câu trả lời:


233

nosetests appname.tests.functional.test_controllernên làm việc, nơi tập tin được đặt tên test_controller.py.

Để chạy một lớp thử nghiệm và phương thức cụ thể, sử dụng một đường dẫn của biểu mẫu module.path:ClassNameInFile.method_name, nghĩa là, với dấu hai chấm ngăn cách đường dẫn mô-đun / tệp và các đối tượng trong tệp. module.pathlà đường dẫn tương đối đến tệp (ví dụ tests/my_tests.py:ClassNameInFile.method_name).


1
Ahhh, sự kết hợp mà tôi đã không thử. thở dài . Cảm ơn!
Ben

2
Điều đó sẽ chạy mọi kiểm tra trong một bộ điều khiển / mô-đun kiểm tra. Điều gì về việc chạy một phương pháp thử nghiệm duy nhất? Một cái gì đó như appname.tests.functional.test_controller.name_of_test_method.
ryonlife

69
Để chạy một lớp thử nghiệm và phương thức cụ thể, sử dụng một đường dẫn của biểu mẫu module.path:ClassNameInFile.method_name, nghĩa là, với dấu hai chấm ngăn cách đường dẫn mô-đun / tệp và các đối tượng trong tệp.
James Murty

9
Đối với bất kỳ ai khác nhầm lẫn: module.pathlà đường dẫn tương đối đến tệp (ví dụ my_tests.py:ClassNameInFile.method_name), không phải là đường dẫn bạn sẽ sử dụng trong một importtuyên bố
bcoughlan

1
@bcoughlan Mình thêm cái này vào câu trả lời! Điều này thực sự khó hiểu.
schlamar

47

Đối với tôi sử dụng Nosetests 1.3.0, các biến thể này đang hoạt động (nhưng hãy đảm bảo bạn có __init__.pytrong thư mục thử nghiệm của mình):

nosetests [options] tests.ui_tests
nosetests [options] tests/ui_tests.py
nosetests [options] tests.ui_tests:TestUI.test_admin_page

Lưu ý rằng dấu hai chấm đơn giữa tên mô-đun và tên lớp.


1
Cảm ơn cho tùy chọn thứ hai, với sự trợ giúp của bash autocomplete chắc chắn là tiện lợi nhất.
Peter Kilczuk

Điều đáng lưu ý là để gọi các thử nghiệm được tham số hóa (các thử nghiệm sử dụng @ tham số hóa.Exand), bạn phải sử dụng cú pháp này: test_file.py:ClassNameInFile.MethodName_TestNumber, trong đó TestNumber có thể là 1, 2, 3, ... mỗi lần thử nghiệm tham số
luca

2

Tôi phải thêm phần mở rộng tệp ".py", nghĩa là

r'/path_to/my_file.py:' +  r'test_func_xy'

Có lẽ điều này là do tôi không có bất kỳ lớp nào trong tệp. Không có .py, mũi đã phàn nàn:

Không thể tìm thấy test_func_xy có thể gọi được trong tệp / path_to / my_file: tệp không phải là mô-đun python

Và điều này mặc dù tôi có một __init__.pytrong thư mục /path_to/.


0

Tôi đã viết kịch bản nhỏ này, dựa trên các câu trả lời trước:

#!/usr/bin/env bash

# 
# Usage:
# 
#     ./noseTest <filename> <method_name>
# 
# e.g.:
# 
#     ./noseTest test/MainTest.py mergeAll
#     
# It is assumed that the file and the test class have the _same name_ 
# (e.g. the test class `MainTest` is defined in the file `MainTest.py`).
# If you don't follow this convention, this script won't work for you.
#

testFile="$1"
testMethod="$2"

testClass="$(basename "$testFile" .py)"

nosetests "$testFile:$testClass.test_$testMethod"

0

Sau đây là tốt cho tôi:

nosetests test_file.py:method_name

Lưu ý rằng các bài kiểm tra của tôi không ở trong một lớp học. Phương pháp kiểm tra là trong một tập tin duy nhất.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.