码迷,mamicode.com
首页 > 编程语言 > 详细

012 python接口 参数化与封装

时间:2018-11-04 22:52:32      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:elf   des   python   bubuko   inf   rom   cti   run   name   

技术分享图片

 

 

‘‘‘
时间: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接口 参数化与封装

标签:elf   des   python   bubuko   inf   rom   cti   run   name   

原文地址:https://www.cnblogs.com/huafan/p/9906010.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!