1. HTMLのテストレポート
テスト担当者は、テスト出力を測定することは困難です。言い換えれば、定量化して評価することはより困難テスターの値が、私は、ソフトウェアテスター深いと考えています。私たちはよくとして自動テストをやって多くの時間と労力を費やしています。そこで、我々は、自動化されたテスト結果を実証するテストレポートを理解することは簡単に美しいとを必要としています。明らかに、ログファイルシンプルでは十分ではありません。
HTMLTestRunner拡張子はフレームワークをテストするPythonのユニットunittestの標準ライブラリである、テストレポートを生成するHTMLを使用することは簡単です。HTMLTestRunnerはBSDライセンスの下でリリースされます。
ダウンロード:http://tungwaiyip.info/software/HTMLTestRunner.html
この拡張は、ショートカットメニューを右クリックしてローカルに保存して名前を付けて保存]を選択し、選択された後、唯一HTMLTestRunner.pyファイルは非常に簡単です。インストールでは、次のPythonのインストールディレクトリにコピーすることができ、非常に簡単です。
Windowsの場合:保存にダウンロードしたファイル... \ Python36 \ Libディレクトリの下に。pycharmは、ファイルを貼り付け、LIBディレクトリをpycharm見つけるために使用することはできません。
Linuxの場合:Ubuntuのターミナルを開き、Pythonのインストールディレクトリを見つけるために例えば、あなたの最初の必要性、に。ターミナルを開いた後、Pythonの対話モードにPythonのコマンド入力は、あなたは、Pythonのsys.pathによってインストールのディレクトリを表示することができます。次/usr/local/Python3.6/dist-packages/ディレクトリにルートHTMLTestRunner.pyとしてファイルをコピーします。Pythonの対話モードで参照HTMLTestRunnerモジュールシステムがエラーでない場合は、次に正常に追加。
1.1修正HTMLTestRunner
HTMLTestRunner.pyはPython 2の開発に基づいているため、Pythonの3環境をサポートするために、それらの部分の必要性が修正されます。HTMLTestRunner.pyエディタに従うことによって、ファイルを開きます。
#94行 のインポートたStringIOの ように修正: インポートIO #539ライン self.outputBuffer = StringIO.StringIOは() に改正: self.outputBuffer = io.StringIO() #631行 印刷、>> sys.stderrを持ち" \ n後やり直し経過:S%'%(self.stopTime- self.startTime) に変更: 印刷(sys.stderrを持ち、' \ n後やり直し経過:S%"%(self.stopTime- self.startTime)) #ライン642上の IF ないRMAP。 has_key(CLS): :として改正 IF ない CLSでRMAP: #766ライン UO = o.decode(' のLatin- 1 ' ) のように変更: UO = E #772行 UE = o.decode(' のLatin- 1 ' ) :のように変更 UE = E
1.2 HTMLのテストレポートを生成します
のは、例えば、試験報告書としてHTMLTestRunner test_baidu.pyファイルを生成していきましょう。
セレンインポートwebdriverを インポートユニットテスト から HTMLTestRunner インポートHTMLTestRunner から時間インポートスリープ クラス:百度(たunittest.TestCase) DEF セットアップ(自己): self.driver = webdriver.Chrome() self.driver.implicitly_wait( 10 ) self.base_url = " http://www.baidu.com " DEF (自己)test_baidu_search: ドライバ = self.driver driver.get(self.base_url) driver.find_element_by_id(" KW ").send_keys(" HTMLTestRunner " ) driver.find_element_by_id(" SU " ).click() 睡眠( 5 ) デフティアダウン(自己): self.driver.quit() の場合 __name__ == " __main__ " : testunit = unittest.TestSuiteインスタンス() testunit.addTest(百度(" test_baidu_search " )) #定义报告存放路径 FP =オープン(" ./result.html '、' WB ') #は、試験報告書を定義 ランナー= HTMLTestRunner(ストリーム= FP、 タイトル = ' 百度検索テストレポート' 説明 = ' の実施例に:' 、 冗長 = 2 ) runner.run(TestUnit) #走行試験 fp.close() #クローズレポートファイル
まず、インポートされたモジュールはHTMLTestRunnerのインポートが付属しています。
第二に、open()メソッドがない場合、ファイルは自動的に切断され、現在のディレクトリ内のオープンバイナリモジュールresult.htmlを書き込みます。
次に、カテゴリHTMLTestRunner HTMLTestRunnerコールモジュールの下で。指定されたテストレポートファイルをストリーミングする、テストレポートのタイトルを定義するために使用されるタイトル、サブタイトルに定義されたテストレポートの説明。
最後に、テストスイートHTMLTestRunnerを実行する()メソッドは、テストの実行によって組み立て。ラスト)(クローズによって、テストレポートファイルをオフにします。
ユースケースが完成ランニングを持って、カレントディレクトリに「result.html」ファイルを開くテストレポートの生成を表示します。
より読みやすい1.3テストレポート
それがテストクラスとテストメソッドの束を記載されているので、今生成されたテストレポートは、読みやすくはありませんが、我々は、慎重に任意の名前は「test_case1」であれば、試験報告書の読みやすさを向上させるために、名前のテストクラスとテストメソッドを配置する必要があります「test_case2」というように、そのレポートはその可読性、テストの関数であり、何でもスクリプトの開発者は「test_case1」明らかにされていない、おそらく長い時間を失うことになります。
機能テストケースを記述する場合は、各テストケースは、タイトルを持って、我々はまた、それのタイトルを追加することができますテストケースを自動化されていますか?Pythonのコメント:それはletのは、別の知識を習得する前に。注意事項コメントと呼ばれる2つのPython、他と呼ばれるドキュメント文字列、前者は、関数、クラス、メソッドを記述するために使用される一般的な注釈です。
コメントのドキュメンテーション文字列タイプを追加するにはトリプル引用符(「」「」「」または「」「」)によって、クラスやメソッドの下では、呼び出されたときに、そのようなコメントは、平時には表示されません、助けて()メソッドを見たことができますそのクラスやメソッドに注意してください。
戻る起源の問いに、HTMLTestRunnerはコメントのドキュメンテーション文字列タイプを読み取ることができます。だから我々は、コメントのこのタイプを追加するには、テストクラスやメソッドにする必要があります。
クラスのBaidu(たunittest.TestCase): '' ' Baiduの検索テスト' '' DEF test_baidu_search(セルフ): '' ' 検索キーワード:HTMLTestRunner ' ''
テストレポートを参照するためのテストケースを再実行します。
1.4テストレポートファイル名
在每次运行测试之前,都要手动修改报告的名称,如果忘记修改,就会把之前的报告覆盖,这样做显得很麻烦,那么有没有办法可以使每次删除的报告名称都不重复并且有意义呢?最好的方法是在报告名称中加入当前时间,这样生成的报告既不会重叠,又能更清晰的知道报告生成的时间。
Python的time模块中提供了丰富的关于时间操作的方法,可以利用这些方法来完成这个需求。
time.time():获取当前时间戳。
time.ctime():当前时间的字符串形式。
time.localtime():当前时间的struct_time形式。
time.strftime():用来获得当前时间,可以将时间格式化为字符串。
Python中时间日期格式化符号(区分大小写)。
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
继续打开测试用例,做如下修改。
import time #............. if __name__ == "__main__": testunit = unittest.TestSuite() testunit.addTest(Baidu("test_baidu_search")) #按照一定格式获取当前时间 now = time.strftime("%Y-%m-%d %H_%M_%S") #定义报告存放路径 filename = './'+now+'result.html' fp = open(filename,'wb') #定义测试报告 runner = HTMLTestRunner(stream=fp, title='百度搜索测试报告', description='用例执行情况:', verbosity=2 ) runner.run(testunit) #运行测试用例 fp.close() #关闭报告文件
通过strftime()方法以指定的格式获取当前时间,将当前时间的字符串赋值给now变量。将now通过加号(+)拼接到生成的测试报告的文件名中。再次运行测试用例,生成测试报告。
1.5 项目集成测试报告
目前HTMLTestRunner只是针对单个测试文件生成测试报告,我们的最终目的是希望将它集成到runtest.py文件中,使其作用于整个测试项目。下面打开runtest.py文件进行修改,还有就是把test_baidu.py改回来。
import unittest from HTMLTestRunner import HTMLTestRunner import time #指定测试用例为当前文件夹下的test_case目录 test_dir = './test_case' discover = unittest.defaultTestLoader.discover(test_dir,pattern='test_*.py') if __name__ == "__main__": # 按照一定格式获取当前时间 now = time.strftime("%Y-%m-%d %H_%M_%S") # 定义报告存放路径 filename = './' + now + ' そしてresult.html ' FP =オープン(ファイル名は、' WB ' ) #は、試験報告書を定義 ランナー= HTMLTestRunner(ストリーム= FP、 タイトル = ' 百度検索テストレポート' 、 説明 = ' 例のインプリメンテーション:' 、 冗長 = 2 ) ランナー.RUN(発見) #実行するテストケース fp.close() #レポートファイルクローズ
生成されたHTMLのテストレポート: