Python做介面測試生成測試報告失敗

我心永恆999發表於2017-08-16

一、先看看我的程式碼,一個簡單的Demo

'''
Created on 2017年8月11日
#登入介面引數化
@author: zx
'''
import unittest
import requests
import ddt
import HTMLTestRunner
import time
@ddt.ddt
class Test(unittest.TestCase):
    def setUp(self):
        print('start')
    def tearDown(self):
        print('end')
    @ddt.data(('張想','123'),
              ('黃浩','123'),
              ('肖菊','123'),
              ('劉威','123'))
    @ddt.unpack
    def test_example(self,LoginName,Password):
        res=requests.get('http://192.168.50.51:8099/Logins/Login',params={'LoginName':LoginName,'Password':Password})
        print(res.status_code)
        print(res.cookies)
        print(res.text)
        self.assertEqual(200,res.status_code)
        self.assertTrue('true' in res.text)

if __name__ == "__main__": 
    #定義一個測試容器
    suite = unittest.TestSuite()
    #將測試用例新增到容器
    suite.addTest(Test("test_example"))
    now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
    filename='D:/Users/zx/workspace/AppiumDemo1/report/'+now+'_result.html'
    with open(filename, 'wb') as fp:
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'測試報告', description=u'用例執行詳情:')
        runner.run(suite) 

二、用python unittest執行,可以執行測試用例,但是無法生成測試報告,因為 ‘if name == “main“: ’下面的程式碼都沒有執行,看圖:
用 Python unittest 執行
執行結果
三、於是用python來執行,但是執行不成功,報錯資訊如下圖:
Python 執行時的報錯資訊
四、期間各種分析原因,換了pycharm執行,包括其他方法:http://blog.csdn.net/xie_0723/article/details/50825310(這裡提到的方法都試過)還是不行。
最後永別的又弄了一個簡單案例,居然生成報告了,唯一的區別是那個用例沒有用到資料驅動。程式碼如下:

# coding=utf-8
#1.先設定編碼,utf-8可支援中英文,如上,一般放在第一行

#2.註釋:包括記錄建立時間,建立人,專案名稱。
'''
Created on 2016-7-27
@author: Jennifer
Project:使用unittest框架編寫測試用例思路
'''
#3.匯入unittest模組
import unittest
import HTMLTestRunner
import time
#4.定義測試類,父類為unittest.TestCase。
#可繼承unittest.TestCase的方法,如setUp和tearDown方法,不過此方法可以在子類重寫,覆蓋父類方法。
#可繼承unittest.TestCase的各種斷言方法。
class Test(unittest.TestCase): 

#5.定義setUp()方法用於測試用例執行前的初始化工作。
#注意,所有類中方法的入參為self,定義方法的變數也要“self.變數”
#注意,輸入的值為字元型的需要轉為int型
    def setUp(self):
        #self.number=input('Enter a number:')
        #self.number=int(self.number)
        self.number=10

#6.定義測試用例,以“test_”開頭命名的方法
#注意,方法的入參為self
#可使用unittest.TestCase類下面的各種斷言方法用於對測試結果的判斷
#可定義多個測試用例
#最重要的就是該部分
    def test_case1(self):
        print (self.number)
        self.assertEqual(self.number,10,msg='Your input is not 10')

    def test_case2(self):
        print (self.number)
        self.assertEqual(self.number,20,msg='Your input is not 20')

    @unittest.skip('暫時跳過用例3的測試')
    def test_case3(self):
        print (self.number)
        self.assertEqual(self.number,30,msg='Your input is not 30')

#7.定義tearDown()方法用於測試用例執行之後的善後工作。
#注意,方法的入參為self
    def tearDown(self):
        print ('Test over')

#8如果直接執行該檔案(__name__值為__main__),則執行以下語句,常用於測試指令碼是否能夠正常執行
if __name__=='__main__':
#8.1執行測試用例方案一如下:
#unittest.main()方法會搜尋該模組下所有以test開頭的測試用例方法,並自動執行它們。
#執行順序是命名順序:先執行test_case1,再執行test_case2
    #unittest.main()
    suite=unittest.TestSuite()
    suite.addTest(Test('test_case2'))
    suite.addTest(Test('test_case1'))
    now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
    filename='D:/'+now+'_result.html'
    with open(filename, 'wb') as fp:
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'測試報告', description=u'用例執行詳情:')
        runner.run(suite)

生成的報告如下:
生成的測試報告
點選詳情之後的顯示結果
這裡的樣式是經過改進後的HTMLTestRunner的樣式,喜歡的可以拿走用:http://pan.baidu.com/s/1miFp3vE
五、於是果斷的把資料驅動去掉了,程式碼如下:

'''
Created on 2017年8月16日

@author: zx
'''
import unittest
import requests

import HTMLTestRunner
import time

class Test(unittest.TestCase):
    def setUp(self):
        print('start')
    def tearDown(self):
        print('end')

    def test_example(self):
        res=requests.get('http://192.168.50.51:8099/Logins/Login',params={'LoginName':"張想",'Password':'123'})
        print(res.status_code)
        print(res.cookies)
        print(res.text)
        self.assertEqual(200,res.status_code)
        self.assertTrue('true' in res.text)
if __name__=='__main__':
#8.1執行測試用例方案一如下:
#unittest.main()方法會搜尋該模組下所有以test開頭的測試用例方法,並自動執行它們。
#執行順序是命名順序:先執行test_case1,再執行test_case2
    #unittest.main()
    suite=unittest.TestSuite()
    suite.addTest(Test('test_example'))
    now = time.strftime("%Y-%m-%d %H_%M_%S",time.localtime())
    filename='D:/'+now+'_result.html'
    with open(filename, 'wb') as fp:
        runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'測試報告', description=u'用例執行詳情:')
        runner.run(suite)

這樣就生成測試報告了:
生成的測試報告
點詳情後的檢視樣式

相關文章