一篇文章带你了解接口自动化
一篇文章帶你了解接口自動化
在之前的文章里我們已經學習了Python,unitTest,pyTest,Allure等自動化框架
在這篇文章中我們將借助這些自動化框架和實際案例來講解如何針對接口進行自動化處理
我們這篇文章將從以下角度展開講解:
- 常用類Requests
- 接口自動化基礎
- 接口自動化實例
常用類Requests
首先我們需要了解一個在接口自動化中經常使用的工具類
Requests庫基本信息
我們在使用接口自動化時一定會調用到不同類型的接口,而Requests庫可以幫助我們快速調用接口:
- Requests 是?Python語?編寫,基于urllib,采?Apache2 Licensed開源協議的 HTTP 庫
- 它? urllib 更加?便,可以節約我們?量的?作,完全滿?HTTP測試需求
我們需要了解到Requests庫是第三方庫,所以我們需要下載后使用:
# 我們直接在Terminal里采用pip指令下載Requests庫即可
pip install requests
# 我們可以采用show命令查看是否安裝成功
pip show requests
我們通常會使用到的關于Requests的方法主要包含以下五種:
# 首先我們注意我們需要導入Requests庫才可以使用
# Get
Requests.get()
# Post
Requests.post()
# Put
Requests.put()
# Delete
Requests.delete()
Requests庫基本使用
下面我們針對Requests庫的使用來做基本的講解:
- Requests庫可以調用不同的類型方法來針對不同請求類型發送接口請求
- Requests庫在發送接口請求后,后端會返回一個Response,我們可以接受并查看信息
下面我們首先針對Requests庫的發送請求進行講解:
# 首先我們需要導包使用
import requests
# 在正式開始講解之前我們需要了解Requests所使用的方法中的一些參數
# url:請求路徑
# params:get特有的參數賦值方法,意思是在url的?之后的參數賦值
# json:通用的參數賦值方法,可以用于復雜的格式也可以用于字典格式
# data:請求體為form表單參數,通常用于字典類型的比較簡單的格式
# header:請求頭參數,通常是Authorization驗證登錄信息或者參數傳輸格式信息等
# files:文件格式,使用字典傳輸,且字典中含有'file'鍵名稱
# 首先我們先來看一下常用的Get請求
# Requests.get(url,params/json)
r = requests.get('http://httpbin.org/get')
# 如果我們想要添加參數進行傳輸,我們可以直接在url后面添加?+參數信息等
r = requests.get('http://httpbin.org/get?name=germey&age=20')
# 我們也可以采用params參數或者json參數進行傳輸
data = {
'name':'germey',
'age':22
}
r = requests.get('http://httpbin.org/get',params=data)
r = requests.get('http://httpbin.org/get',json=data)
# 下面我們了解一下Post請求,Put和Delete操作和Post操作完全相同,這里不做介紹
# Requests.get(url,json)
r = requests.post('http://httpbin.org/post')
# 和Get方法不同的是,Post不能采用params也不能采用url拼接,只能采用json進行傳輸
data = {
"name":"germey",
"age":"22"
}
r = requests.post('http://httpbin.org/post',data=data)
# 除了基本的url和json之外,我們在請求過程中還需要很多參數類型
# 例如header頭,我們的大部分操作都需要做登陸驗證,而登錄一般會含有一個Authorization屬性,后面value值為Token值,這里我們講述
# 但是除了Authorization屬性外,我們還可能會傳輸參數類型Content-Type等其他信息
# 我們通常將header寫為字典格式進行傳輸
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) Gecko/20100101 Firefox/95.0',
'my-test':'Hello'
}
r = requests.get('http://httpbin.org/get',headers=headers)
# 我們在傳輸過程中也經常傳輸文件類型,我們通常需要讀取文件并將其存儲為Python中的文件才可以使用
# 我們需要注意以二進制方式讀取文件
# 我們在post方法中需要傳輸字典,字典key值為'file'是默認名詞
files = {'file':open('favicon.ico','rb')}
# 我們調用post方法并使用files參數進行文件上傳
r = requests.post('http://httpbin.org/post',files=files)
# 我們還需要注意一些特殊的網站,如果該網站的證書沒有被CA機構信任,程序將會出錯,提示SSL證書驗證錯誤
# 那么我們在訪問時,只需要將verify參數設置為False即可
r = requests.get('https://www.12306.cn',verify=False)
# 針對特別防范的網站,當我們大量進行數據爬取或者重復使用時,可能會觸發該網站的自衛系統將我們當前IP進行屏蔽
# 我們可以通過使用代理來防止這種情況(IP可以在網上購買)
proxies = {
'http': 'http://161.35.4.201:80',
'https': 'https://161.35.4.201:80'
}
r = requests.get('http://httpbin.org/get', proxies=proxies)
在講述完Requests庫的發送請求后,我們可以針對Requests請求后的Response響應進行講述:
# 我們在發送請求后服務器會對我們的請求進行響應,這就是所獲得的Response,所有請求都會獲取到該響應
# 我們下面來介紹一些我們常用的response類型的方法
# 獲取狀態碼
response.status_code
# JSON形式的響應內容
response.json()
# 文本形式的響應內容
response.text
# 請求url
response.url
# 查看響應頭部字符編碼
response.encoding
# 頭信息
response.headers
# cookie信息
response.cookies
# 我們通常獲得這些信息之后可以進行查看,我們可以通過print直接打印查看
print(response.status_code)
# 但更多情況下,我們通過這些信息來做斷言判斷是否符合我們預期
assert 200 == response.status_code
assert "成功" in response.text
# 當然我們在必要情況下我們還需要獲取到對應的值去使用
# 例如我們通常需要一個Token來表示我們處于登陸狀態,那么我們就需要在執行登陸操作時將token值獲取并保存下來
self.token = r.json().get("token")
# 如果我們需要cookie,我們也可以直接獲取cookies并將其保存在一個列表中
response = requests.get("百度一下,你就知道")
for key, value in response.cookies.items():
print(key + '=' + value)
接口自動化基礎
下面我們來講解接口自動化的一些基礎信息
接口測試
既然我們要學習接口自動化,那么我們肯定首先需要了解接口測試:
- 使用工具或代碼代替人對接口進行測試的技術
- 其根本目的是為了防止開發修改代碼時引入新的問題
那么我們的接口測試主要針對哪些方面:
- 我們的項目分為前端和后端
- 前端僅僅是調用接口的一種方式,其根本還是后端的處理
- 所以我們的接口測試就是針對后端所書寫的方法進行測試,測試其是否符合我們的需求
我們測試人員針對接口測試的主要時間段是在哪里:
-
開發進行系統測試提測前,可以先進行接口自動化腳本的編寫
-
開發進行系統測試提測后,優先進行系統測試用例的執行,再進行接口自動化腳本的編寫
-
所以我們接口測試的主要時間段針對于前后端聯調的時間進行接口測試
接口測試基本操作
下面我們來講解接口測試的基本操作順序:
# 1.選取自動化測試用例
# 我們一般會在前后端開發時進行測試用例的書寫,我們僅需要選取我們所測試模塊的測試用例即可
# 2.搭建自動化測試環境
# 這個主要根據公司本身,一般由主管進行搭建,員工拉取書寫更新上傳即可
# 3.搭建自動化測試框架
# 這個主要也是公司進行選取,不過一般都是python+pytest+allure基本框架加上一些輔助框架
# 4.代碼實現自動化
# 這個就是我們接口測試自動化主要書寫的部分
# 5.輸出測試報告
# 我們一般會采用allure進行美觀測試報告生成
# 6.實現持續集成
# 我們接口測試的目的其實是為了在本次開發時使當前開發不影響之前功能的使用,所以我們的接口自動化需要保證效率重復使用等多方面
我們在進行接口測試時可以通過三種方式獲得接口:
-
在測試頁面使用F12查看調用接口信息
-
采用Charles等抓包工具查看接口信息
-
向項目經理/后端人員索要接口文檔信息
最后我們稍微提一下如果我們使用手動接口測試,我們一般會使用Postman工具進行測試,我們這里不做詳解
接口自動化實例
接下來我們通過一個接口自動化實例來講解接口自動化
接口自動化框架信息
我們在接觸接口自動化代碼之前,我們首先需要了解這個框架主要需要什么:
# 首先假設我們創建了一個Pro_viv文件來當作主目錄
# 首先我們需要一個api文件夾
# 我們會將我們所需要調用的Api接口進行封裝(Requests庫相關的信息)
# 然后我們需要一個script文件夾
# 我們需要將我們所使用的case進行存儲,其實就是我們pytest中所使用的測試用例,我們的數據調用也是在這里進行調用
# 然后我們需要一個data文件夾
# 我們會將我們所需要使用的jpg或json等信息文件存儲進該文件夾
# 最后我們還需要一個report文件夾
# 我們會將所生成的allure報告文檔存放在該文件夾下
# 除了文件夾外,我們還需要兩個文件來進行一些信息整理
# 首先我們需要一個config.py
# 我們會使用該文件來存放一些通用的路徑或其他信息
# 我們還需要一個pytest.ini
# 這是pytest的配置文件,我們可以在里面修改pytest相關的信息
接口自動化實例展示
那么下面我們將通過多個需求案例來逐步了解接口自動化的使用
登錄接口
我們首先給出需求信息:
# 地址:http://kdtx-test.itheima.net/api/login
# 方法:Post
# 請求數據:
# 請求頭:Content-Type: application/json
# 請求體:{"username":”admin", "password": " admin123","code":"2", "uuid":"驗證碼接口返回數據"}
我們首先需要書寫接口,所以我們需要在api文件下創建login.py進行接口書寫:
# api 文件夾 - login.py
# 接口封裝時,重點是依據接口文檔封裝接口信息
# 需要使用的測試數據是從測試用例傳遞的、接口方法被調用時需要返回對應的響應結果
# 所以我們在書寫完接口方法后,我們還需要到script文件夾下創建test文件來創建case來執行pytest
# 導包
import requests
# 創建接口類
class LoginAPI:
# 初始化
def __init__(self):
# 指定url基本信息
self.url_verify = "http://kdtx-test.itheima.net/api/captchaImage"
self.url_login = "http://kdtx-test.itheima.net/api/login"
# 驗證碼
def get_verify_code(self):
return requests.get(url=self.url_verify)
# 登錄
# 我們在登錄時需要請求信息,我們這里添加一個參數,當我們使用case時傳參并調用
def login(self, test_data):
return requests.post(url=self.url_login, json=test_data)
當我們書寫完接口信息之后,我們就可以到script文件夾下創建test文件進行測試用例書寫:
# script 文件夾 - verify.py
Class TestLogin:
uuidValue = None
# 驗證碼測試
def test01_get_verify_code1(self):
# 獲取驗證碼
res_v = self.login_api.get_verify_code()
# 登錄驗證
def test02_login1(self):
# 這里我們直接將信息寫為列表進行賦值處置
login_data = {
"username": "admin",
"password": "admin123",
"code": "2",
"uuid": "f3334fd726bf4155b787198c701786b6"
}
res_l = self.login_api.login(test_data=login_data)
# 驗證碼測試2
def test03_get_verify_code1(self):
# 獲取驗證碼
res_v = self.login_api.get_verify_code()
# 一些信息的打印
print(res_v.status_code)
print(res_v.json())
# 打印uuid數據,這是我們在登錄時所需要使用的數據
print(res_v.json().get("uuid"))
# 我們可以采用一個類變量來將uuid存儲起來進行使用
self.uuidValue = res_v.json().get("uuid")
# 登陸驗證2
def test04_login(self):
# 由于我們的uuid是通過get_verify_code獲得的驗證碼,我們可以通過pytest連續執行兩條case并獲取uuid進行使用
login_data = {
"username": "admin",
"password": "admin123",
"code": "2",
"uuid": self.uuidValue
}
res_l = self.login_api.login(test_data=login_data)
課程接口
我們首先給出需求信息:
# 課程模塊接口封裝:核心在于依據接口文檔實現接口信息封裝、重點關注接口如何被調用
# 接口信息:
# URL:http://kdtx-test.itheima.net/api/clues/course
# 方法:Post
# 請求數據:
# 請求頭:{ "Content-Type ": "application/json ", "Authorization": "xxx " }
# 請求體:{ "name": "測試開發提升課01", "subject": "6","price": 899,"applicablePerson": "2", "info": "測試開發提升課01"}
我們首先需要書寫接口,所以我們需要在api文件下創建course.py進行接口書寫:
# api 文件夾 - course.py
# 我們將在該接口類中實現多個接口,我們將書寫除了上述需求信息外的其他接口
# 導包
import requests
# 創建接口類
class CourseAPI:
# 初始化
def __init__(self):
self.url_add_course = "http://kdtx-test.itheima.net/api/clues/course"
self.url_select_course = "http://kdtx-test.itheima.net/api/clues/course/list"
# 我們需要注意:
# 我們合同的操作均需要在登錄前提下進行操作
# 而我們判斷是否登錄的條件就是在headers請求頭中是否存在符合要求的token
# 所以我們下述的接口方法中,除了我們所需要的數據信息外,我們還需要添加headers,并提供Authorization信息
# 課程添加
def add_course(self, test_data, token):
return requests.post(url=self.url_add_course, json=test_data, headers={"Authorization": token})
# 查詢課程列表
def select_course(self, test_data, token):
# 這里我們可以采用url拼接,也可以采用params來傳遞參數,
# return requests.get(url=self.url_select_course,params=params,headers={"Authorization": token})
return requests.get(url=self.url_select_course + f"/{test_data}", headers={"Authorization": token})
# 修改課程
def update_course(self, test_data, token):
return requests.put(url=self.url_add_course, json=test_data, headers={"Authorization": token})
# 刪除課程
def delete_course(self, course_id, token):
return requests.delete(url=self.url_add_course + f"/{course_id}", headers={"Authorization": token})
當我們書寫完接口信息之后,我們就可以到script文件夾下創建test文件進行測試用例書寫:
# 導包
import config
from api.login import LoginAPI
from api.course import CourseAPI
from api.contract import ContractAPI
# 創建測試類
class TestContractBusiness:
# 初始化(由于我們需要使用登錄時的Token,所以我們進行存儲)
token = None
# 前置處理
def setup(self):
# 實例化接口對象
self.login_api = LoginAPI()
self.course_api = CourseAPI()
self.contract_api = ContractAPI()
# 后置處理
def teardown(self):
pass
# 1、登錄成功
def test01_login_success(self):
# 獲取驗證碼
res_v = self.login_api.get_verify_code()
# 登錄
login_data = {
"username": "admin",
"password": "admin123",
"code": "2",
"uuid": res_v.json().get("uuid")
}
res_l = self.login_api.login(test_data=login_data)
# 提取登錄成功之后的token數據并保存在類的屬性中
TestContractBusiness.token = res_l.json().get("token")
# 2、課程新增成功
def test02_add_course(self):
add_data = {
"name": "測試開發提升課01",
"subject": "6",
"price": 899,
"applicablePerson": "2",
"info": "測試開發提升課01"
}
response = self.course_api.add_course(test_data=add_data, token=TestContractBusiness.token)
print(response.json())
合同接口
我們首先給出需求信息:
# 請求頭:{ "Content-Type ": " multipart/form-data ", "Authorization": "xxx " }
# 請求體:{" file " : 合同文件"}
# 接口信息:
# 新增合同:
# 地址:http://kdtx-test.itheima.net/api/contract
# 方法:Post
# 請求數據:
# 請求頭:{ "Content-Type ": "application/json ", "Authorization": "xxx " }
# 請求體:{ "name": "測試888", "phone": "13612345678", "contractNo": "HT10012003", "subject": "6", "courseId": " 99", "channel": "0", "activityId": 77, "fileName": "xxx"}
我們首先需要書寫接口,所以我們需要在api文件下創建contract.py進行接口書寫:
# 導包
import requests
# 創建接口類
class ContractAPI:
# 初始化
def __init__(self):
self.url_upload = "http://kdtx-test.itheima.net/api/common/upload"
self.add_contrat = "http://kdtx-test.itheima.net/api/contract"
# 合同上傳接口
def upload_contract(self, test_data, token):
# 我們的合同需要一份文件信息上傳,所以我們參數這里使用到了file
# 其實我們的headers頭部的Content-Type信息也被修改,但由于該信息是根據傳輸內容更新的,所以我們不需要設置
return requests.post(url=self.url_upload, files={"file": test_data}, headers={"Authorization": token})
# 合同新增
def add_contract(self, test_data, token):
# 這里就是很正常的新增
return requests.post(url=self.add_contrat, json=test_data, headers={"Authorization": token})
當我們書寫完接口信息之后,我們就可以到script文件夾下創建test文件進行測試用例書寫:
# 導包
import config
from api.login import LoginAPI
from api.course import CourseAPI
from api.contract import ContractAPI
# 創建測試類
class TestContractBusiness:
# 初始化
token = None
# 前置處理
def setup(self):
# 實例化接口對象
self.login_api = LoginAPI()
self.course_api = CourseAPI()
self.contract_api = ContractAPI()
# 后置處理
def teardown(self):
pass
# 1、登錄成功
def test01_login_success(self):
# 獲取驗證碼
res_v = self.login_api.get_verify_code()
# 登錄
login_data = {
"username": "admin",
"password": "admin123",
"code": "2",
"uuid": res_v.json().get("uuid")
}
res_l = self.login_api.login(test_data=login_data)
# 提取登錄成功之后的token數據并保存在類的屬性中
TestContractBusiness.token = res_l.json().get("token")
# 2、上傳合同成功
def test02_upload_contract(self):
# 這里我們需要將對應的文件采用二進制讀取并且轉化為file類型將其作為參數傳參
f = open(config.BASE_PATH + "/data/test.pdf", "rb")
# 這里的test_data在Api中作為files的file被傳遞
response = self.contract_api.upload_contract(test_data=f, token=TestContractBusiness.token)
print(response.json())
# 3、合同新增成功
def test03_add_contract(self):
# contractNo: 數據唯一
add_data = { "name": "測試888", "phone": "13612345678", "contractNo": "HT20230007", "subject": "6", "courseId": " 99", "channel": "0", "activityId": 77, "fileName": "xxx"}
response = self.contract_api.add_contract(test_data=add_data, token=TestContractBusiness.token)
print(response.json())
單接口測試
下面我們來講解針對于單個接口進行多測試用例測試的方法:
# 我們這里以Login的API為基準
# 我們需要采用不同的測試用例來進行測試并判斷是否滿足需求
我們首先給出測試用例圖表:
然后我們采用代碼進行接口自動化測試用例書寫:
# 導包
from api.login import LoginAPI
# 創建測試類
class TestLoginAPI:
# 初始化
uuid = None
# 前置處理
# 我們將uuid驗證碼作為所有case方法執行前的前置操作進行執行并存儲使用
def setup(self):
# 實例化接口類
self.login_api = LoginAPI()
# 獲取驗證碼
response = self.login_api.get_verify_code()
# 提取驗證碼接口返回的uuid參數值
TestLoginAPI.uuid = response.json().get("uuid")
# 后置處理
def teardown(self):
pass
# 下面我們通過多個Case的書寫來模擬多場景情況
# 我們下面Case的基本邏輯沒有發生修改,僅僅是針對參數進行了處理
# 登錄成功
def test01_success(self):
login_data = {
"username": "manager",
"password": "123456",
"code": "2",
"uuid": TestLoginAPI.uuid
}
response = self.login_api.login(test_data=login_data)
# 我們使用斷言來判斷是否符合需求,若符合需求pytest會通過案例,若不符合會進行報錯
assert 200 == response.status_code # 斷言響應狀態碼為200
assert '成功' in response.text # 斷言響應數據包含'成功'
assert 200 == response.json().get("code") # 斷言響應json數據中code值
# 登錄失?。ㄓ脩裘麨榭眨? def test02_without_username(self):
login_data = {
"username": "",
"password": "123456",
"code": "2",
"uuid": TestLoginAPI.uuid
}
response = self.login_api.login(test_data=login_data)
# 我們使用斷言來判斷是否符合需求,若符合需求pytest會通過案例,若不符合會進行報錯
assert 200 == response.status_code # 斷言響應狀態碼為200
assert '成功' in response.text # 斷言響應數據包含'成功'
assert 200 == response.json().get("code") # 斷言響應json數據中code值
# 登錄失?。ㄎ醋杂脩簦? def test03_username_not_exist(self):
login_data = {
"username": "jack666",
"password": "123456",
"code": "2",
"uuid": TestLoginAPI.uuid
}
response = self.login_api.login(test_data=login_data)
# 我們使用斷言來判斷是否符合需求,若符合需求pytest會通過案例,若不符合會進行報錯
assert 200 == response.status_code # 斷言響應狀態碼為200
assert '成功' in response.text # 斷言響應數據包含'成功'
assert 200 == response.json().get("code") # 斷言響應json數據中code值
參數化測試
我們在前面通過書寫多個Case來進行同一接口的自動化測試,但這種方法會導致代碼冗余
所以我們通常會通過pytest的參數化設置來統一數據將其放入Case用例中按順序依次執行來減少代碼冗余:
# 我們可以將數據單獨存放在文件頂層
# 我們所傳入的數據需要采用列表作為外層,采用字典作為數據參數進行存儲
# 導包
from api.login import LoginAPI
import pytest
import json
# 測試數據
test_data = [
("manager", "123456", 200, '成功', 200),
("", "123456", 200, '錯誤', 500),
("jack666", "123456", 200, '錯誤', 500),
]
class TestLoginAPI:
# 初始化
uuid = None
# 前置處理
def setup(self):
# 實例化接口類
self.login_api = LoginAPI()
# 獲取驗證碼
response = self.login_api.get_verify_code()
# 提取驗證碼接口返回的uuid參數值
TestLoginAPI.uuid = response.json().get("uuid")
# 后置處理
def teardown(self):
pass
# 多Case登錄驗證
# 這里我們使用了我們上面所定義的test_data作為數據源來進行參數化處理
# 我們可以將我們所需要更替的數值全部采用參數化處理,使處理數據變得多樣化
# 這里所使用的parametrize是pytest的內容,我們在上篇文章已經講過,如果不了解可以去查看
@pytest.mark.parametrize("username, password, status, message, code",test_data)
def test01_success(self, username, password, status, message, code):
# 這里的username,password使用參數化
login_data = {
"username": username,
"password": password,
"code": "2",
"uuid": TestLoginAPI.uuid
}
response = self.login_api.login(test_data=login_data)
# 這里的斷言判斷均使用參數化,因為不同條件下所產生的response數據是不同的
assert status == response.status_code
assert message in response.text
assert code == response.json().get("code")
接口自動化配置解釋
最后我們需要解釋我們在最開始所提及到的兩個接口配置信息
全局信息配置文件
我們在最開始提及到了在我們的文件目錄下創建了一個Config.py文件
下面我們來解釋一下該文件的主要作用:
# 我們通常在該文件下定義我們全局都需要使用的數據信息,來減少我們代碼的冗余
# 例如我們在之前的接口或測試用例中都需要使用到的url,我們可以在這里定義其項目url前綴,然后我們只需要書寫對應的接口路徑即可
# 又或者說由于我們之前的文件上傳沒有固定的文件目錄,我們需要從當前文件下去推斷data文件夾在哪個位置
# 但是如果我們項目發生改動,或者我們借鑒該代碼去書寫其他部分的文件,我們就需要去重新推斷data文件夾在哪個位置
# 所以我們可以通過config.py直接獲得絕對路徑下的data目錄的位置,然后我們只需要進行拼接就可以獲得到我們所需要的數據信息
所以我們的config.py文件可以這樣去定義:
# config.py文件
# 導包
import os
# 設置項目環境域名
BASE_URL = "http://kdtx-test.itheima.net"
# 獲取項目根路徑
BASE_PATH = os.path.dirname(__file__)
當然我們對應的接口代碼和測試用例代碼也需要進行修改:
# 首先針對API文件,我們需要去修改我們的url路徑信息
def __init__(self):
# 指定url基本信息
# self.url_verify = "http://kdtx-test.itheima.net/api/captchaImage"
self.url_verify = config.BASE_URL + "/api/captchaImage"
# self.url_login = "http://kdtx-test.itheima.net/api/login"
self.url_login = config.BASE_URL + "/api/login"
# 針對文件上傳時的路徑我們也可以去修改
def test03_upload_contract(self):
# f = open("../data/test.pdf", "rb")
f = open(config.BASE_PATH + "/data/test.pdf", "rb")
response = self.contract_api.upload_contract(test_data=f, token=TestContractBusiness.token)
print(response.json())
框架設置配置文件
我們之前還提到了一個pytest.ini文件,該文件其實就是針對pytest執行用例的初始化進行設置:
# 該文件其實屬于pytest的學習范疇,我們在這里簡單介紹一下
[pytest]
# 表示我們在Terminal執行pytest時的默認執行配置
# 這里我們采用-s表示詳情信息展示,采用--alluredir表示采用allure生成測試報告并生成在report文件夾下
addopts=-s --alluredir report
# 這里表示我們所需要執行的測試用例的文件范圍
testpaths=./script
# 這里規定了配置測試搜索的模塊文件名稱
python_files=test*
# 這里規定了我們所執行的測試類的類名規范
python_classes=Test*
# 這里規定了我們所執行的測試方法的方法名規范
python_functions=test*
結束語
這篇文章中詳細介紹了以pytest為框架的接口自動化實現的基本信息,希望能為你帶來幫助
下面給出我學習和書寫該篇文章的一些參考文章,大家也可以去查閱:
- 黑馬課程:001_認識接口測試_嗶哩嗶哩_bilibili
- 知乎文章:python中requests庫使用方法詳解 - 知乎 (zhihu.com)
- CSDN:requests庫的使用(一篇就夠了)_上善若水。。的博客-CSDN博客
- 稀土掘金:軟件測試/測試開發丨學習筆記之接口自動化測試 - 掘金 (juejin.cn)
總結
以上是生活随笔為你收集整理的一篇文章带你了解接口自动化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Log4j入门使用
- 下一篇: 数据结构与算法 | 图(Graph)