1. 程式人生 > >012 python接口 參數化與封裝

012 python接口 參數化與封裝

ima failed 用例 dir pen 配置 keep true 技術

技術分享圖片

‘‘‘
時間:2018/11/04
目錄: 
  一: 禪道登錄
1 工程結構 2 unittest文件 3 實現功能文件
4 執行結果   二: 禪道登錄 - 報告
1 工程結構 2 Common 3 TestCase 4 TestFunction 5 TestReport 6 run_all.py
     7 執行結果 三: 拉勾網登錄 四: 博客園登錄
‘‘‘

一: 禪道登錄

  1 工程結構

技術分享圖片

1 : 主要兩個文件,unittest文件和操作文件。

2 : unittest文件的功能:輸入數據、預期結果、斷言判斷。

2 : 操作文件的功能:步驟執行、返回實際結果 。


  2 unittest文件

# coding:utf-8
import unittest
from chandao_login.chandao_login_api_v2 import *

class TestLogin(unittest.TestCase):
    #session = requests.session()
    def setUp(self):
        self.session = requests.session()

    def
tearDown(self): self.session.cookies.clear() # 清除緩存 - cookies self.session.close() # 去除警告 - 關閉進程 def test_001(self): ‘‘‘ 登錄成功: 正確賬號 + 正確密碼 ‘‘‘ strUser = "admin" strPass = "123456" strResult = Login(self.session, strUser, strPass) bResult
= DecideResult(strResult) self.assertTrue(bResult) def test_002(self): ‘‘‘ 登錄失敗: 正確賬號 + 錯誤密碼 ‘‘‘ strUser = "admin" strPass = "123456789" strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertFalse(bResult) def test_003(self): ‘‘‘ 登錄失敗: 錯誤賬號 + 錯誤密碼 ‘‘‘ strUser = "admin123" strPass = "123456789" strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertFalse(bResult) if __name__ == __main__: unittest.main()


  3 實現功能文件

# coding:utf-8
import requests


url = "http://127.0.0.1/zentao/user-login.htm"  # url經常變 : 做全局變量 - 做配置文件

def Login(session, strUser, strPass):
    ‘‘‘
    登錄禪道
    :param session:     session
    :param strUser:     用戶名
    :param strPass:     密碼
    :return:            請求結果 - 服務端
    ‘‘‘

    body = {
        "account": strUser,
        "password": strPass,
        "keepLogin[]": "on",
        "referer": "/zentao/my.html"
    }
    r = session.post(url, data = body)
    strResult = r.content.decode("utf-8")
    return strResult

def DecideResult(strResult):
    ‘‘‘
    判斷結果 - 登錄禪道
    :param strResult:  請求結果 - 服務端
    :return:
    ‘‘‘
    if "登錄失敗" in strResult:
        print("登錄失敗")
        return False
    elif "parent.location" in strResult:
        print("登錄成功")
        return True
    else:
        print("登錄失敗 - 其他情況")
        return False

if __name__ == __main__:
    s = requests.session()
    result = Login(s, "admin", "123456")
    DecideResult(result)

  4 執行結果

技術分享圖片

1 : 測試用例全部運行pass。

技術分享圖片

1 : 測試用例有failed。


二: 禪道登錄 - 報告

  1 工程結構

技術分享圖片

1 : 由5個部分組成:4個文件夾 + 1個運行文件。

2 : Common文件夾: 存放公共的文件

3 : TestCase文件夾: 存放unittest文件

4 : TestFunction文件夾: 存放功能操作文件

5 : TestReport文件夾: 存放測試報告文件

6 : run_all.py: 執行測試、生成報告。


  2 Common

技術分享圖片

1 : 使用第三方 HTMLTestRunner_cn.py,方便查看測試結果。


  3 TestCase

# coding:utf-8
import unittest
from TestFunction.chandao_login_api import *

class TestLogin(unittest.TestCase):
    #session = requests.session()
    def setUp(self):
        self.session = requests.session()

    def tearDown(self):
        self.session.cookies.clear()    # 清除緩存 - cookies
        self.session.close()            # 去除警告 - 關閉進程

    def test_001(self):
        ‘‘‘ 登錄成功: 正確賬號 + 正確密碼 ‘‘‘
        strUser = "admin"
        strPass = "123456"
        strResult = Login(self.session, strUser, strPass)
        bResult = DecideResult(strResult)
        self.assertTrue(bResult)

    def test_002(self):
        ‘‘‘ 登錄失敗: 正確賬號 + 錯誤密碼 ‘‘‘
        strUser = "admin"
        strPass = "123456789"
        strResult = Login(self.session, strUser, strPass)
        bResult = DecideResult(strResult)
        self.assertFalse(bResult)

    def test_003(self):
        ‘‘‘ 登錄失敗: 錯誤賬號 + 錯誤密碼 ‘‘‘
        strUser = "admin123"
        strPass = "123456789"
        strResult = Login(self.session, strUser, strPass)
        bResult = DecideResult(strResult)
        self.assertFalse(bResult)

if __name__ == __main__:
    unittest.main()

  4 TestFunction

# coding:utf-8
import requests


url = "http://127.0.0.1/zentao/user-login.htm"  # url經常變 : 做全局變量 - 做配置文件

def Login(session, strUser, strPass):
    ‘‘‘
    登錄禪道
    :param session:     session
    :param strUser:     用戶名
    :param strPass:     密碼
    :return:            請求結果 - 服務端
    ‘‘‘

    body = {
        "account": strUser,
        "password": strPass,
        "keepLogin[]": "on",
        "referer": "/zentao/my.html"
    }
    r = session.post(url, data = body)
    strResult = r.content.decode("utf-8")
    return strResult


def DecideResult(strResult):
    ‘‘‘
    判斷結果 - 登錄禪道
    :param strResult:  請求結果 - 服務端
    :return:
    ‘‘‘
    if "登錄失敗" in strResult:
        print("登錄失敗")
        return False
    elif "parent.location" in strResult:
        print("登錄成功")
        return True
    else:
        print("登錄失敗 - 其他情況")
        return False


if __name__ == __main__:
    s = requests.session()
    result = Login(s, "admin", "123456")
    DecideResult(result)

  5 TestReport

技術分享圖片

1 : 運行完程序,生成一個report.html文件。

技術分享圖片

1 : 測試用例全部運行pass。

技術分享圖片

1 : 測試用例有failed。


  6 run_all.py

# coding:utf-8
import unittest
import os
from Common import HTMLTestRunner_cn


# 路徑兼容 - windows/mac
cur_path = os.path.dirname(os.path.realpath(__file__))  # 獲取路徑 - 當前腳本
cur_path = os.path.join(cur_path, "TestCase")           # 拼接路徑

# 顯示結果 - unnitest
pattern = "test*.py"    # 匹配文件
discover = unittest.defaultTestLoader.discover(start_dir = cur_path, pattern = pattern)
print(discover)


# 路徑兼容 - windows/mac
cur_path = os.path.dirname(os.path.realpath(__file__))  # 獲取路徑 - 當前腳本
report_path = os.path.join(cur_path, "TestReport", "report.html")
fp = open(report_path, "wb")
runner = HTMLTestRunner_cn.HTMLTestRunner(stream = fp,                      # 報告路徑
                                          title = "接口測試用例報告",       # 報告標題
                                          description = "測試用例詳情報告", # 報告描述
                                          retry = 1,                        # 錯誤重寫執行
                                          verbosity = 2)                    # 註釋顯示
runner.run(discover)

三: 拉勾網登錄
四: 博客園登錄

012 python接口 參數化與封裝