IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 软件测试之接口测试实验 -> 正文阅读

[Python知识库]软件测试之接口测试实验


前言

软件测试之接口测试实验


一、Postman+Fiddler实验

Postman

Postman

Fiddler
Fiddler

二、Flask框架开发接口实验

导入Flask

pip install Flask

导入pymysql

pip install pymysql

SQL语句

select * from test
insert into test(number,name) values (%s,%s)
delete from test where number = %s and name = %s
update test set name = %s where number = %s

代码:

from flask import Flask,request,redirect, url_for
import pymysql
import json

app = Flask(__name__)

@app.route('/selectAccount', methods=['POST', 'GET'])
def selectAccount():
    conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='test', port=3306, charset='utf8')
    cur = conn.cursor()  # 获取一个游标
    cur.execute('select * from test')
    data = cur.fetchall()
    data1 = []
    # 自己拼Json
    result = {
        'msg': '',
        'code':0,
        'data': []
    }
    for d in data:
        data2 = {
            'id':0,
            'number':"",
            'name':""
        }
        data2['id'] = d[0]
        data2['number'] = d[1]
        data2['name'] = d[2]
        data1.append(data2)
    result['data'] = data1
    result['msg'] = "success"
    conn.close()
    return result

@app.route('/addAccount', methods=['POST', 'GET'])
def addAccount():
    conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='test', port=3306, charset='utf8')
    cur = conn.cursor()  # 获取一个游标
    number = request.values.get("number")
    name = request.values.get("name")
    result = {
        'msg': '',
        'code': 0,
    }
    try:
        cur.execute('insert into test(number,name) values (%s,%s)',(number,name))
        conn.commit()  # 提交到数据库执行
        result['msg'] = '添加成功'
    except:
        conn.rollback()  # 如果发生错误则回滚
        result['msg'] = '添加失败'
        result['code'] = -1
    # 关闭数据库连接
    conn.close()
    return result

@app.route('/deleteAccount', methods=['POST', 'GET'])
def deleteAccount():
    conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='test', port=3306, charset='utf8')
    cur = conn.cursor()  # 获取一个游标
    number = request.values.get("number")
    name = request.values.get("name")
    result = {
        'msg': '',
        'code': 0,
    }
    try:
        cur.execute('delete from test where number = %s and name = %s',(number,name))
        conn.commit()  # 提交到数据库执行
        result['msg'] = '删除成功'
    except:
        conn.rollback()  # 如果发生错误则回滚
        result['msg'] = '删除失败'
        result['code'] = -1
    # 关闭数据库连接
    conn.close()
    return result

@app.route('/updateAccount', methods=['POST', 'GET'])
def updateAccount():
    conn = pymysql.connect(host='localhost', user='root', passwd='123456', db='test', port=3306, charset='utf8')
    cur = conn.cursor()  # 获取一个游标
    number = request.values.get("number")
    name = request.values.get("name")
    result = {
        'msg': '',
        'code': 0,
    }
    try:
        cur.execute('update test set name = %s where number = %s',(name,number))
        conn.commit()  # 提交到数据库执行
        result['msg'] = '修改成功'
    except:
        conn.rollback()  # 如果发生错误则回滚
        result['msg'] = '修改失败'
        result['code'] = -1
    # 关闭数据库连接
    conn.close()
    return result

if __name__ == '__main__':
    app.run(debug=True)

三、Unittest+requests接口测试实验

代码:

import unittest
import os
import requests
import xlrd
from parameterized import parameterized

# 项目路径
base_path = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))

def pustRequests(path,query,method):
    url ="http://127.0.0.1:5000%s"%path
    number = ''
    name = ''
    if query != '':
        number = query.split('&')[0].split('=')[1]
        name = query.split('&')[1].split('=')[1]
        print(number)
    if method == 'post' or method == 'POST':
        return requests.post(url=url,params={'number':number,'name':name}).json()
    if method == 'get' or method =='GET':
        return requests.get(url=url,params={'number':number,'name':name}).json()


# 读取测试用例Els(最新的xlrd不支持Excel)
def readExcel(file_name):
    path = base_path + '\\FlaskTest\\' + file_name
    work_book = xlrd.open_workbook(path)  # 打开Excel表
    sheets = work_book.sheet_names()  # 获取所有的sheets页
    DatasList = []
    for sheet in sheets:
        sheets = work_book.sheet_by_name(sheet)
        nrows = sheets.nrows
        for i in range(0, nrows):
            values = sheets.row_values(i)
            DatasList.append(values)
    title_list = DatasList[0]
    content_list = DatasList[1:]
    return content_list
    # new_list = []
    # for content in content_list:
    #     dic = {}
    #     for i in range(len(content)):
    #         dic[title_list[i]] = content[i]
    #     new_list.append(dic)
    # print(new_list)
    # return new_list

class testCase(unittest.TestCase):

    @classmethod
    def setUpClass(cls) -> None:  # setupclass类方法  全部用例开始前执行一次
        print('开始写入接口自动化测试用例')

    @classmethod
    def tearDownClass(cls) -> None:
        print('自动化接口用例结束')

    def setUp(self) -> None:
        print()
        print('开始本条接口用例')

    def tearDown(self) -> None:
        print('结束本条用例')
        print()

    # 开始使用parameterized
    @parameterized.expand(readExcel("AccountCase.xls"))
    def test_account(self,case_name,path,query,method):# 用例方法名开头必须test
        print("此次用例名为:" + str(case_name))
        print("路径为:" + str(path))
        print("参数为:" + str(query))
        print("方法为:" + str(method))
        print("返回结果为:" + str(pustRequests(path,query,method)))

if __name__ == '__main__':
    load = unittest.TestLoader().loadTestsFromTestCase(TestLogin)  # 使用loader加载方式 来找寻所有已test开头的用例
    suite = unittest.TestSuite([load, ])

请添加图片描述

parameterized只能对于数组有效,对于Json不太管用,所以获取表中测试实例的代码注释的那一段就是多余的!!!

四、Robotframework框架实验

安装Robotframework
在这里插入图片描述
安装Robotframework-ride
在这里插入图片描述
启动ride
在这里插入图片描述
在这里插入图片描述

新建测试用例:
在这里插入图片描述
请添加图片描述
用例代码:

*** Settings ***
Library           RequestsLibrary
Library           Collections

*** Test Cases ***
addAccount
    create session    webindex    http://127.0.0.1:5000
    ${para}    create dictionary    number=xxx    name=xxx
    ${res}    get request    webindex    /addAccount    params=${para}
    ${json}    to json    ${res.text}
    ${code}    get from dictionary    ${json}    code
    ${msg}    get from dictionary    ${json}    msg
    ${msg}    convert to String    ${msg}
    Should Be Equal As Strings    添加成功    ${msg}

selectAccont
    create session    webindex    http://127.0.0.1:5000
    ${res}    get request    webindex    /selectAccount
    ${json}    to json    ${res.text}
    ${code}    get from dictionary    ${json}    code
    ${msg}    get from dictionary    ${json}    msg
    ${msg}    convert to String    ${msg}
    Should Be Equal As Strings    查找成功    ${msg}

updateAccount
    create session    webindex    http://127.0.0.1:5000
    ${para}    create dictionary    number=xxx    name=xxx
    ${res}    get request    webindex    /updateAccount    params=${para}
    ${json}    to json    ${res.text}
    ${code}    get from dictionary    ${json}    code
    ${msg}    get from dictionary    ${json}    msg
    ${msg}    convert to String    ${msg}
    Should Be Equal As Strings    修改成功    ${msg}

deleteAccount
    create session    webindex    http://127.0.0.1:5000
    ${para}    create dictionary    number=xxx    name=xxx
    ${res}    get request    webindex    /deleteAccount    params=${para}
    ${json}    to json    ${res.text}
    ${code}    get from dictionary    ${json}    code
    ${msg}    get from dictionary    ${json}    msg
    ${msg}    convert to String    ${msg}
    Should Be Equal As Strings    删除成功    ${msg}

运行结果:
请添加图片描述

五、持续集成实验(Jenkins)

安装
在这里插入图片描述

运行
在这里插入图片描述

实验三定时:
在这里插入图片描述
构建命令:
PyCharm复制就行
在这里插入图片描述在这里插入图片描述
实验四在实验三之后构建:
在这里插入图片描述

构建命令在ride运行的command,复制就行
在这里插入图片描述
在这里插入图片描述
运行效果:
请添加图片描述
请添加图片描述

POST是实验3的请求,GET是实验4的请求
请添加图片描述

六、Selenium(Python版本)

Win+R命令行输入pip install selenium
在这里插入图片描述

2、功能说明:
Selenium是ThoughtWork专门为Web应用程序编写的一个验收测试工具。支持的浏览器包括IE、Mozilla Firefox、MozillaSuite等。框架底层使用JavaScript模拟真实用户对浏览器进行操作。
功能:
(1)测试与浏览器的兼容性—测试你的应用程序看是否能够很好得工作在不同的浏览器和操作系统之上。
(2)测试系统功能—创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.net、java、perl等不同语言的测试脚本。
3、使用Demo:
下载对应浏览器的驱动:
在这里插入图片描述
测试接口:
请添加图片描述
请添加图片描述

测试UI:
访问页面链接
获取对应id的输入框并进行输入
获取对应id的按钮并点击
在这里插入图片描述
在这里插入图片描述
使用代码:

#启动浏览器输入网址
driver = webdriver.Chrome(executable_path = chrome_driver)
url = ' http://localhost:8081/'
driver.get(url)

#寻找指定id的文本框输入值
driver.find_element_by_id('account').send_keys('123456')

#寻找指定id的按钮并点击
driver.find_element_by_id('login').click()

#寻找指定的xpath的控件并进行相关操作
driver.find_element_by_xpath('/html/body/div/section/section/main/div[1]/div/div[3]/div[4]/div[2]/table/tbody/tr[1]/td[4]/div/button[1]').click()

当实在不知道怎么找到某个控件的时候,可以尝试xpath,或者说,直接用xpath就完了,谁用谁上瘾

指定控件的xpath的获取方法(谷歌为例):
在想要获取控件xpath的页面按下Fn+F12或者右键点击检查
在这里插入图片描述
选择指针工具,点击你想要的那个控件,会自动跳到该控件的html代码
在这里插入图片描述
右键相应的html代码,选择复制->复制完整XPath,就复制完毕了

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:35:34  更:2022-05-18 17:37:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:51:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码