DW的ajax简单应用,你离高薪 offer 只差一个接口自动化入门,我是认真的
一、自動化分類 (1)接口自動化
python/java+requests+unittest框架來實現 python/java+RF(RobotFramework)框架來實現——對于編程要求不高
(2)Web UI功能自動化
python/java+selenium+unittest+ddt+PO框架來實現 python/java+RFS(RobotFrameWork+Selenium)框架來實現——對于編程要求不高
(3)App自動化
python/java+appnium+unittes框架來實現 python/java+RF(RobotFramework)框架來實現——對于編程要求不高
二、接口自動化與Web自動化的區別
(1)接口自動化是沒有界面的,不需要對界面元素定位操作,不需要考慮界面延遲的問題,執行效率更高 (2)接口自動化用的是requests測試庫,Web自動化用的selenium測試庫 (3)接口自動化的覆蓋率可以達到100%(絕大部分的接口都可以實現自動化) Web自動化的覆蓋率能達到80-90%算OK(可能會有某些功能是沒辦法實現自動化的)
三、怎么做接口自動化 3.1、流程 A. 確定業務范圍,哪些業務功能的接口可以做自動化——接口自動化的覆蓋率可以達到 100% B. 時間進度安排,人員分配 C. 確定自動化測試框架 D. 準備數據——準備接口用例數據 E. 編寫接口自動化腳本 3.2、搭建接口自動化測試環境 1、安裝python3.x——配置python的環境變量 2、安裝PyCharm——python開發工具 3、安裝測試庫 Requests庫—— 提供了豐富的用來發請求,對請求進行處理的API函數 xlrd,xlwt庫—— 提供了對Excel文件進行操作的API函數 Pymysql庫—— 提供了對Mysql數據庫進行操作的API函數 paramsunittest庫—— 實現參數化的庫 Json庫—— 提供了對Json格式的數據進行操作的API函數(python自帶的基礎庫) Re庫—— 可以使用這個庫中的API函數對HMTL數據進行操作 4.3、準備數據——準備接口用例數據 我們把接口用例數據放入在Excel表格中,因為每一個接口都包含:請求地址,請求方式,請求參數,以及響應數據;所以在Excel表格中按照以下方式來組織我們的接口用例數據,包含以下幾個內容: 用例名稱,請求地址,請求方式,請求頭,請求參數,預期結果(斷言) 然后我們會封裝一個函數去讀取Excel數據,以參數的形式傳遞到腳本中,具體操作步驟如下: 4.4、編寫自動化測試腳本
1、步驟:
A、導包
import requests
B、組織請求參數
url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
par = {
‘email’: ‘Jason’,
‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,
‘auto_login’: 0,
‘ajax’: 1
}
C、發送請求
res = requests.post(url, data=par)
res = requests.get(url,params=par)
D、提取響應對象中的數據,并做斷言
1、提取響應*body*內容**
res.text —— 如果返回的是html格式的數據,使用res.text提取`
res.json() —— 如果后臺返回的是json格式的數據,則使用這個API函數來提取`
2、提取響應頭***
res.headers
3、提取狀態碼,響應信息
res.status_code
res.reason
4、提取cookie值
res.cookies()
2、傳遞請求頭
header = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0’,
‘Accept’: ‘application/xml’,
}
res = requests.post(url,data=par,headers=header)
3、傳遞cookie,token值
通過請求頭來傳遞 —— 直接從瀏覽器上查看cookie值,并傳遞到后臺。
header = {
‘Cookie’: ‘PHPSESSID=3724b412550a557825da5528dd6198c6’
}
res = requests.post(url,data=par,***headers=heade***r,allow_redirects=False)
發請求的時候通過cookies這個參數來傳遞
import requests
#1. 登錄,獲取cookie值
def getCookie():
url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
par = {
‘email’: ‘Jason’,
‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,
‘auto_login’: 0,
‘ajax’: 1
}
res = requests.post(url, data=par)
return res.cookies
#2. 調用充值接口
#2.1 獲取cookie值
cookie = getCookie()
#2.2 發充值請求
url = ‘http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’
par = {
‘check_ol_bl_pay’:’on’,
‘money’:1000,
‘bank_id’:0,
‘memo’:234567890,
‘payment’:5,
}
#發充值請求
res1 = requests.post(url,data=par,cookies=cookie,allow_redirects=False) # 自動重定向的,可以取消自動重定向
print(res1.status_code)
print(res1.reason)
print(res1.headers)
先創建一個session對象,所有請求都使用這個session對象來發送
import requests
#1. 發登錄請求
url = ‘http://localhost/fw/index.php?ctl=user&act=dologin&fhash=hbUjHVrQIgHkwdMdNGnPrSiIkVBeWcrOvJpmsXgyNuMewKfKGy’
par = {
‘email’: ‘Jason’,
‘user_pwd’: ‘TWlKaGRrRFJrQXJZZlFXYkh5WlNQZ2tpZkFZQlVlUUhyRE5SdndSUGdKanFDTG1LYUYlMjV1NjVCOSUyNXU3RUY0emdwMTIzNDU2JTI1dThGNkYlMjV1NEVGNg==‘,
‘auto_login’: 0,
‘ajax’: 1
}
#創建一個seesion對象,后期使用這個session對象來發請求
ses = requests.session()
#發登錄請求,返回的cookie值會自動化保存到session對象中
response1 = ses.post(url,data=par)
#2. 發充值請求
url = ‘http://localhost/fw/member.php?ctl=uc_money&act=incharge_done’
par = {
‘check_ol_bl_pay’:’on’,
‘money’:1000,
‘bank_id’:0,
‘memo’:234567890,
‘payment’:5,
}
response2 = ses.post(url,data=par,allow_redirects=False)
print(response2.headers)
復制代碼
4.5、工程管理維護與優化 1、數據驅動——實現接口用例數據與腳本的分離 我們把接口用例數據放入在Excel表格中,因為每一個接口都包含:請求地址,請求方式,請求參數,以及響應數據;所以在Excel表格中按照以下方式來組織我們的接口用例數據,包含以下幾個內容: 用例名稱,請求地址,請求方式,請求頭,請求參數,預期結果(斷言) 然后我們會封裝一個函數去讀取Excel數據,以參數的形式傳遞到腳本中,具體操作步驟如下:
安裝xlrd庫
pip install xlrd
調用xlrd庫中的API函數來實現對Excel表格數據的讀取
#封裝一個讀取Excel表格數據的函數
#對Excel表格數據的讀取需要用到一個庫——xlrd庫
import xlrd
def get_data(filename,sheetname):
#1. 打開Excel文件
workbook = xlrd.open_workbook(filename)
#2. 打開Excel文件中的某張表
sheet = workbook.sheet_by_name(sheetname)
#3. 讀取表中的內容
list = []
for I in range(1,sheet.nrows):
data = sheet.row_values(i)
list.append(data)
return list
if __name__==‘__main__’:
result = get_data(‘D:\\\\JMeter\\\\1947_Project\\\\cxy-project02\\\\data\\\\接口用例數據.xls’,’登錄’)
print(result)
問題解決1
工程問題:
1、沒有安裝xlrd
2、沒有把xlrd導入工程
復制代碼
2、unittest框架 作用:用來管理用例,加載用例,執行用例 原理:有幾個核心組件 1、測試固件 setUp() 每條用例執行之前,首先會執行這個setUp()方法,在setUp()方法中完成準備初始化工作 比如:連接數據庫,后期在將Web UI功能自動化的時候,可以在這里去打開瀏覽器,配置 tearDown() 每條用例執行完成之后,回收一些資源,比如:關閉數據庫,關閉瀏覽器 2、測試用例 每一條用例需要實現一個用例方法,每個用例方法都必須要以test開頭 3、測試套件 執行用例的時候,需要創建測試套件,把用例加入測試套件。 4、加載器 用來加載用例的,把測試用例加入測試套件中 5、執行器 用來執行測試套件中的用例的 如何使用unittest框架來編寫用例
#1. 導包
import time
import unittest
import requests
from common.excelUtils import get_data
import paramunittest
#讀取excel表格中的數據
list = get_data(‘D:\\\\JMeter\\\\1947_Project\\\\cxy-project02\\\\data\\\\接口用例數據.xls’,’登錄’)
#2. 定義一個類,去繼承unittest.TestCase
@paramunittest.parametrized(*list) # 引用list中的所有數據
class FwLogin(unittest.TestCase):
def setParameters(self,case_name,url,method,headers,params,assert_info):
‘’’
有多少條用例,這個函數就會執行多少次,每執行一條用例之前先會執行這個函數,把數據提取出來。
:param case_name:
:param url:
:param method:
:param headers:
:param params:
:param assert_info:
:return:
‘’’
self.case_name = str(case_name)
self.url = str(url)
self.method = str(method)
self.headers = str(headers)
self.params = str(params)
self.assert_info = str(assert_info)
#1. 實現一個用例方法
def test_login_case(self):
time.sleep(5)
#1. 組織參數
self.headers= eval(self.headers) # 將字符串轉化為字典
self.params = eval(self.params)
#2. 發請求
if self.method == ‘POST’:
response = requests.post(self.url,data=self.params,headers=self.headers)
else:
response = requests.get(self.url,params=self.params,headers=self.headers)
#3. 檢查,斷言
self.check_result(response)
def check_result(self,response):
‘’’
斷言 檢查結果的
:param response:
:return:
‘’’
self.assert_info = eval(self.assert_info) #預期結果
try:
self.assertEqual(response.status_code,200,’響應狀態碼錯誤’)
self.assertEqual(response.reason,’OK’,’響應的響應碼錯誤’)
self.assertDictEqual(response.json(),self.assert_info,’響應的正文內容不一致!’)
print(‘%s測試用例通過!’ %self.case_name)
except AssertionError as e:
print(‘%s測試用例不通過!%s’ %(self.case_name,e))
if __name__ == ‘__main__’:
unittest.main()
最后為方便大家學習測試,特意給大家準備了一份13G的超實用干貨學習資源,涉及的內容非常全面。
包括,軟件學習路線圖,50多天的上課視頻、16個突擊實戰項目,80余個軟件測試用軟件,37份測試文檔,70個軟件測試相關問題,40篇測試經驗級文章,上千份測試真題分享,還有2021軟件測試面試寶典,還有軟件測試求職的各類精選簡歷,希望對大家有所幫助……
關注我公眾號:【程序員小濠】即可獲取這份資料了!
我的軟件測試交流群:175317069 歡迎各位大佬來群里交流~我也會不定期的發放軟件測試資料
如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
總結
以上是生活随笔為你收集整理的DW的ajax简单应用,你离高薪 offer 只差一个接口自动化入门,我是认真的的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(2637):this
- 下一篇: 数据结构课程设计——宿舍管理查询软件