接口測試

前端php

  • iOS
  • 安卓

後臺前端

  • java, python, php, .net

接口把client端和server端聯繫起來,兩端之者使用的數據類型是json。
json是一種通用的數據類型,返回的格式爲key-value,鍵值對,{"name":"張三","age":23"}java

也有使用xml的,格式爲:python

<name>zhangsan</name>
<sex>male</sex>

測試接口以前,得有一個接口文檔,文檔中有請求方式,請求參數,響應信息等。
功能測試測的是業務邏輯。接口測試屬於業務測試中一種。mysql

  • 關注業務邏輯
  • 正常的,異常的

若是是get請求,不須要藉助任何工具,只須要用流星器就能夠發送請求linux

http://api.xxxx.cn/api/user/stu_info?stu_name=小黑
返回結果以下:sql

{
        "error_code": 0,
        "stu_info": [
                {
                        "id": 5671,
                        "name": "小黑",
                        "sex": "男",
                        "age": 28,
                        "addr": "河南省濟源市北海大道32號",
                        "grade": "天蠍座",
                        "phone": "18799932946",
                        "gold": 120054446
                }
        ]
}

請求中格式爲http://ip:port/路徑/接口名?key1=value1&key2=values2。若是有多個參數中間用&鏈接多個參數數據庫

使用postman發送請求

postman的body中form-data和x-www-form-urlencoded區別:json

  • 只傳key-value格式時二者無區別
  • form-data除了能夠key-value外,還能夠傳file等多媒體數據
  • x-www-form-urlencoded只支持key-value格式

POST請求windows

clipboard.png

入參爲json類型,body中選擇raw,JSON類型,如未標明,使用key-vaule格式

clipboard.png

cookie放在本地的一個鍵值對,請求時發送cookie中的sessionId與服務端sessionId進行匹配,匹配成功則經過驗證。
session放在服務端的一個鍵值對,有一個過時時間。

查看Cookie信息,經過瀏覽器F12能夠看到存儲的cookie信息

clipboard.png

添加Cookie信息,在Headers中添加Cookie信息

clipboard.png

添加header信息

clipboard.png

文件上傳

clipboard.png

POSTMAN全局變量

clipboard.png

使用方式

clipboard.png

DNS, HTTP協議,三次握手,4次揮手

HTTP請求分爲兩個部分,請求頭請求體,請求頭中是一個額外的信息,好比瀏覽器類型,cookie等。請求體中傳的是具體的數據。

  1. GET請求只有請求頭,沒有請求體。它的數據直接放在url中。POST請求放在body中。
  2. GET請求有長度限制,POST請求沒有長度限制。
  3. GET請求沒有POST安全,但經過抓包均可以看到信息。

請求頭(header):

  • 額外的信息
  • 瀏覽器
  • cookie
  • 須要什麼樣的數據

請求體(body):

  • key=value

接口用例

項目 模塊 用例id 用例描述 請求URL 請求方式 請求數據 預期結果 請求報文 返回報文 測試結果 測試人員

HTTP狀態碼

  • 200 請求成功
  • 302 重定向
  • 404 客戶端請求不合法,頁面未找到
  • 500 服務端有問題

使用JMeter

Jmeter亂碼處理

JMeter查看結果樹中返回信息亂碼
在Jemter的bin目錄下,jmeter.properties文件中添加sampleresult.default.encoding=utf-8,後重啓jmeter。
JMeter中body data中亂碼
Jmeter的bin目錄下,jmeter.properties文件中添加jsyntaxtextarea.font.family=Hack,後重啓jmeter。

GET請求

clipboard.png

POST請求

clipboard.png

POST入參爲JSON類型,若是避免插入到數據庫中的中文爲亂碼,須要在Content encoding中填寫utf-8。

clipboard.png

添加cookie信息,cookie信息寫在HTTP信息頭管理器中,HTTP信息頭若是放在線程組下與HTTP請求同級,則線程組中的全部請求均可以使用該HTTP信息頭中的信息,若是放在某個HTTP請求下,則只對該請求單獨生效。

clipboard.png

添加Referer信息

clipboard.png

文件上傳,Jmeter 3.0以上版本須要填寫MIME TYPE信息,隨便填寫就行,好比填寫爲text。

clipboard.png

JMeter參數化

  • 用戶自定義的變量
  • 函數助手中

    • __Random
    • __counter
    • __time
  • 從文件中讀取

線程組->配置單元->用戶自定義的變量,填寫變量名和變量值

clipboard.png

使用方式爲${變量名}

clipboard.png

使用函數助手中__Random函數成生隨機數,在此例中因爲壓測用戶註冊功能,用戶名是不可重重的,此處的隨機數用於生成用戶名後的數字
選項->函數助手對話框->__Random,輸入最小值和最大值後,生成。

clipboard.png

使用方式以下:

clipboard.png

在線程組中循環5次,在查看結果樹中能夠看到5次請求中的用戶名都不同

clipboard.png

clipboard.png

使用計數器__counter函數進行自增

clipboard.png

使用__time函數取時間,須要傳入一個格式,yyyyMMddhhmmss,HH爲24小時制,hh爲12小時制

clipboard.png

時間表示

  • 格式化好的時間 201904161004
  • 時間戳,在__time函數中不對其進行格式化出來的就是時間戳,JMeter爲Java開發,Java中時間戳默認是精確到毫秒,因此須要除以1000纔是真真的時間戳。

clipboard.png

從文件中讀取數據
有場景須要大批量數據,數據是從數據庫中導入到文件中。
線程組->配置元件->CSV Data Set Config
若是Filename中只寫了文件名,則須要把文件放到Jmeter的bin目錄下。
若是文件中有多列,用符號分隔,須要在Delimiter中添寫相關的符號。在Variable Names中也須要填寫多個變量名,中間用","分隔,會每次取一行數據
Ignore First Line,是否忽略第一行
Allow quoted data,是否容許帶引號
Recycle on EOF,遇到文件結束後是否循環
Stop thread on EOF,遇到文件結束符中止線程
Sharing Mode,是否全部線程組生效,仍是隻在當前線程組生效

  • All Threads,全部線程組
  • Current Thread Group,當前線程組

clipboard.png

clipboard.png

關聯

關聯:調用第一個接口,從第一個接口中返回的數據中取到某個值,放到第二個接口中使用
HTTP請求->後置處理器->JSON PATH EXTRACTOR

登陸接口返回爲以下:

{
        "error_code": 0,
        "login_info": {
                "login_time": "20190416115043",
                "sign": "96b4de24614f0796402c54f889e50147",
                "userId": 9786
        }
}

咱們須要取到login_info中的sign,將sign的值放到充值接口中用做cookie值。寫法爲$.login_info.sign,其中$表明最外層的{},一層一層往內取。

clipboard.png

將取到的sign放到充值接口的cookie中

clipboard.png

若是須要查看各種變量中取到的值,可使用線程組->Sampler->Debug Sampler查看各變量所對應的值。

clipboard.png

JMeter壓測

  • Jmeter壓測

    • 分佈式壓測
    • linux下運行
    • 10-15分鐘
    • 穩定性測試,2天或一週左右

在線程組中設置線程數及壓測的持續時長,若是要進行長時間壓測,須要勾選"永遠",以及勾選調度器,並填寫持續時間
填寫了持續時間後,結束時間會失效
填寫了啓動延持後,啓動時間會失效
Ramp-Up Period,線程在多少秒內會啓動完,0爲全部線程所有同時啓動。通常爲1便可。

clipboard.png

TPS,服務器每秒鐘能處理的請求數
響應時間,請求從發出後與接收到服務器返回給數據所花時間

聚合報告
Samples,發出的請求數
Average,平均響應時間,單位爲毫秒
Throughput,TPS
Error%,錯誤率,不一樣業務要求不同,像銀行業務要求100%的正確率。

clipboard.png

斷言,用於校驗結果

JMeter操做數據庫

測試計劃->Add directory or jar to classpath

clipboard.png

線程組->配置單元->JDBC Connection Configuration
填寫Variable Name
填寫Databse URL,jdbc:mysql://192.168.1.116:3307/bugfree?characterEncoding=UTF-8&allowMultiQueries=true

clipboard.png

添加JDBC Request,在Variable Name中須要填寫JDBC鏈接配置中填寫的變量名
JDBC請求中,Query Type爲Callable Statement時,能夠同時執行查詢和更新語句。

clipboard.png

JMeter分佈式壓測

  • 有多臺電腦,每臺電腦上都有jmeter,且這幾臺電腦能相互PING通
  • 控制機修改本地Jmeter中jmeter.properties中remote_hosts項,添加負載機ip和端口,

    • remote_hosts=192.168.177.128:1099
    • 若是須要控制機也發送壓力的話,能夠在remote_hosts中加班localhost:1099
  • 在負載機上修改jmeter.properties文件,(若是負載機爲Windows,不須要修改rmi的兩項)

    • server_port=1099
    • client.rmi.localport=0
    • server.rmi.port=1099
  • 負載機上運行jmeter-server.bat

    • 若是負載機爲Linux,須要關閉防火牆
    • ./jmeter-server -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx(負載機本機IP)
    • 若是控制機也發送壓力,一樣須要運行jmeter-sever.jbat
  • 若是有參數化文件,須要在其它負載機的一樣位置放置一份。
  • 控制機,運行->遠程所有啓動

負載機壓測時,控制機的查看結果樹中響應結果內容會爲空,須要添加斷言,用以判斷返回結果是否正確。

Linux下NO GUI非圖形化方式運行Jmeter

  1. 把Jmeter的bin目錄加入到環境變量(不加環境變量則須要到Jmter目錄下運行jmeter命令)
  2. 把在windows上製做好的jmeter腳本放到Linux上
  3. 若是有參數化文件,須要把參數化文件放到jmeter的bin目錄中
  4. 運行jmeter -n -t /路徑/腳本名.jmx -l 結果.jtl
    -n 非圖形化界面運行
    -t 指定測試腳本
    -l 指定結果文件,以.jtl結尾
  5. 生成.jtl文件後,下載到windows上
  6. 打開jmeter,添加查看結果樹,在結果樹中打開.jtl文件

clipboard.png

相關文章
相關標籤/搜索