2008-12-09 16 views
13

Tôi có một bộ sưu tập lớn các tiện ích dòng lệnh mà chúng tôi tự viết và sử dụng thường xuyên. Tại thời điểm thử nghiệm chúng là rất cồng kềnh và do đó chúng tôi không làm nhiều thử nghiệm như chúng tôi aught.Cách tốt nhất để kiểm tra các công cụ dòng lệnh?

Tôi tự hỏi liệu có ai có thể đề xuất các kỹ thuật hay công cụ tốt để thực hiện công việc tốt của loại điều này không.

Chỉnh sửa: để làm rõ điều này là UNIX

Cảm ơn bạn trước. Tom

+0

Bạn đang sử dụng hoặc bằng văn bản/sản xuất các tiện ích dòng lệnh? –

Trả lời

4

Aruba là một tiện ích mở rộng Cucumber để thử nghiệm các ứng dụng dòng lệnh được viết bằng bất kỳ ngôn ngữ lập trình nào.

Để sử dụng, bạn cần ruby ​​để chạy thử nghiệm, nhưng mục đích của aruba là cung cấp thư viện định nghĩa bước được xác định trước để bạn không cần phải viết bất kỳ mã ruby ​​nào để thực hiện kiểm tra khả thi bộ. (. Mặc dù tại một số điểm có thể bạn sẽ muốn viết một chút ruby ​​để thực hiện một vài bước tùy chỉnh)

Bạn có thể thấy một ví dụ phức tạp của một công cụ dòng lệnh thử nghiệm với Aruba ở đây: jingweno/gh

3

Bạn có thể gọi chúng từ tập lệnh shell (tập tin thực thi, trên hệ điều hành MS), chuyển hướng đầu ra sang tệp, sau đó quét tệp theo chương trình để đảm bảo rằng nó có đầu ra chính xác. Tôi không biết về một khuôn khổ thử nghiệm tự động hóa điều này cho bạn, nhưng nó nên được khá thẳng về phía trước để thiết lập nó cho mình.

+0

Có - Tôi hy vọng rằng ai đó có thể biết về một khuôn khổ hoặc công cụ. Tôi đã nghĩ về việc đánh một người lên bản thân mình là quyền của bạn, nó sẽ không quá khó khăn. Chúc mừng. Tom –

0

Bạn có thể thực hiện việc này từ máy chủ lưu trữ tập lệnh kiểu máy chủ lưu trữ hàng loạt.

Nhưng tôi hứa sẽ sử dụng công cụ lập lịch tác vụ như (http://www.splinterware.com/products/wincron.htm) hoặc phần mềm miễn phí/chuyên nghiệp khác.

Ở đó bạn có thể dễ dàng sao chép/dán các tham số dòng lệnh mà bạn nên thay đổi khi bạn muốn kiểm tra phần mềm của mình trong khoảng 100 lần ?!

2

Tôi đã làm một chút về điều này (trong một thời gian loooong trước hehe) sử dụng Expect để kiểm tra xem những gì đã xảy ra là những gì tôi, umm, dự kiến ​​

4

Tôi khuyên bạn nên cấu trúc mã dòng lệnh công cụ của bạn để các tiện ích dòng lệnh là một khách hàng đến một thư viện các hàm và/hoặc các lớp.

Thay vì chỉ đơn giản là sử dụng tiêu chuẩn :: cout để in ra, có chức năng thư viện lấy tham chiếu ostream mặc định là std :: cout. Khi bạn đang thử nghiệm, hãy cung cấp std :: stringstream để thu thập đầu ra.

Cuối cùng, chỉ cần so sánh kết quả của tiện ích với kết quả mong đợi bằng cách sử dụng khung kiểm tra đơn vị yêu thích của bạn.

(Tôi xin lỗi ví dụ cụ thể về C++ ... Tôi chắc chắn cũng có nhiều cách để thực hiện những việc tương tự trong các ngôn ngữ khác).

0

Bạn có thể sử dụng perl với thư viện Test::more, cung cấp một khuôn khổ tuyệt vời để kiểm tra CLI. Mặc dù được thiết kế chủ yếu để thử nghiệm đơn vị, bạn có thể mở rộng nó để kiểm tra luồng công việc của người dùng.

Một số phương pháp:

# Various ways to say "ok" 
    ok($got eq $expected, $test_name); 
    is ($got, $expected, $test_name); 
    isnt($got, $expected, $test_name); 

    # Rather than print STDERR "# here's what went wrong\n" 
    diag("here's what went wrong"); 

    like ($got, qr/expected/, $test_name); 
    unlike($got, qr/expected/, $test_name); 

    cmp_ok($got, '==', $expected, $test_name); 

3

Sử dụng Cram bạn có thể viết các bài kiểm tra tương tự như một phiên vỏ tương tác. Cram sau đó sẽ phát lại các lệnh từ thử nghiệm, so sánh đầu ra với tham chiếu và báo cáo sự khác biệt. Định dạng thử nghiệm khá linh hoạt và cho phép bạn kết hợp đầu ra bằng cách sử dụng ký tự đại diện Perl hoặc các ký tự đại diện giống như vỏ.

1

Bats (Bash Automated Testing System) bởi Sam Stephenson. Nó rất nhỏ, được viết hoàn toàn bằng vỏ và có một bộ tính năng đẹp.

Trước đề nghị Aruba vẻ thú vị, nhưng trong một số trường hợp nó có thể là yên tĩnh một overkill về phụ thuộc (ruby, dưa chuột)