Python做接口測試生成測試報告失敗

一、先看看我的代碼,一個簡單的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)

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

發佈了30 篇原創文章 · 獲贊 49 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章