refactor: move python version to github.com/httprunner/httprunner.py

This commit is contained in:
lilong.129
2025-02-05 21:33:53 +08:00
parent 63a02fe121
commit 9376692b71
103 changed files with 1 additions and 12356 deletions

View File

View File

View File

@@ -1,30 +0,0 @@
config:
name: "request methods testcase with functions"
variables:
foo1: config_bar1
foo2: config_bar2
base_url: "https://postman-echo.com"
verify: False
teststeps:
-
name: get with params
variables:
foo1: bar1
sum_v: "${sum_two(1, 2)}"
request:
method: GET
url: /get
params:
foo1: $foo1
foo2: $foo2
sum_v: $sum_v
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
extract:
session_foo2: "body.args.foo2"
validate:
- eq: ["status_code", 200]
- eq: ["body.args.foo1", "bar1"]
- eq: ["body.args.sum_v", "3"]
- eq: ["body.args.foo2", "config_bar2"]

View File

@@ -1,26 +0,0 @@
config:
name: "reference testcase unittest for abnormal folder path"
base_url: "https://postman-echo.com"
verify: False
teststeps:
-
name: request with functions
testcase: a-b.c/1.yml
export:
- session_foo2
-
name: post form data
variables:
foo1: bar12
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$session_foo2"
validate:
- eq: ["status_code", 200]
- eq: ["body.form.foo1", "bar12"]
- eq: ["body.form.foo2", "config_bar2"]

View File

@@ -1,34 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: a-b.c/1.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseT1(HttpRunner):
config = (
Config("request methods testcase with functions")
.variables(**{"foo1": "config_bar1", "foo2": "config_bar2"})
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunRequest("get with params")
.with_variables(**{"foo1": "bar1", "sum_v": "${sum_two(1, 2)}"})
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.extract()
.with_jmespath("body.args.foo2", "session_foo2")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.foo1", "bar1")
.assert_equal("body.args.sum_v", "3")
.assert_equal("body.args.foo2", "config_bar2")
),
]
if __name__ == "__main__":
TestCaseT1().test_start()

View File

@@ -1,44 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: a-b.c/2 3.yml
from httprunner import HttpRunner, Config, Step, RunRequest
from httprunner import RunTestCase
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from a_b_c.T1_test import TestCaseT1 as T1
class TestCaseT23(HttpRunner):
config = (
Config("reference testcase unittest for abnormal folder path")
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(RunTestCase("request with functions").call(T1).export(*["session_foo2"])),
Step(
RunRequest("post form data")
.with_variables(**{"foo1": "bar12"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"Content-Type": "application/x-www-form-urlencoded",
}
)
.with_data("foo1=$foo1&foo2=$session_foo2")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.form.foo1", "bar12")
.assert_equal("body.form.foo2", "config_bar2")
),
]
if __name__ == "__main__":
TestCaseT23().test_start()

View File

@@ -1 +0,0 @@
# NOTICE: Generated By HttpRunner. DO NOT EDIT!

View File

@@ -1,11 +0,0 @@
curl httpbin.org
curl https://httpbin.org/get?key1=value1&key2=value2
curl -H "Content-Type: application/json" -H "Authorization: Bearer b7d03a6947b217efb6f3ec3bd3504582" -d '{"type":"A","name":"www","data":"162.10.66.0","priority":null,"port":null,"weight":null}' "https://httpbin.org/post"
curl -F "dummyName=dummyFile" -F file1=@file1.txt -F file2=@file2.txt https://httpbin.org/post
curl https://httpbin.org/post -d 'shipment[to_address][id]=adr_HrBKVA85' -d 'shipment[from_address][id]=adr_VtuTOj7o' -d 'shipment[parcel][id]=prcl_WDv2VzHp' -d 'shipment[is_return]=true' -d 'shipment[customs_info][id]=cstinfo_bl5sE20Y'
curl https://httpbing.org/post -H "Content-Type: application/x-www-form-urlencoded" --data "key1=value+1&key2=value%3A2"

View File

@@ -1,13 +0,0 @@
from httprunner import __version__
def get_httprunner_version():
return __version__
def sum_two(m, n):
return m + n
def get_variables():
return {"foo1": "session_bar1"}

View File

@@ -1,356 +0,0 @@
{
"log": {
"version": "1.2",
"creator": {
"name": "Charles Proxy",
"version": "4.6.1"
},
"entries": [
{
"startedDateTime": "2021-10-15T20:29:14.396+08:00",
"time": 1528,
"request": {
"method": "GET",
"url": "https://postman-echo.com/get?foo1=HDnY8&foo2=34.5",
"httpVersion": "HTTP/1.1",
"cookies": [],
"headers": [
{
"name": "Host",
"value": "postman-echo.com"
},
{
"name": "User-Agent",
"value": "HttpRunnerPlus"
},
{
"name": "Accept-Encoding",
"value": "gzip"
}
],
"queryString": [
{
"name": "foo1",
"value": "HDnY8"
},
{
"name": "foo2",
"value": "34.5"
}
],
"headersSize": 113,
"bodySize": 0
},
"response": {
"_charlesStatus": "COMPLETE",
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "sails.sid",
"value": "s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk",
"path": "/",
"domain": null,
"expires": null,
"httpOnly": true,
"secure": false,
"comment": null,
"_maxAge": null
}
],
"headers": [
{
"name": "Date",
"value": "Fri, 15 Oct 2021 12:29:15 GMT"
},
{
"name": "Content-Type",
"value": "application/json; charset=utf-8"
},
{
"name": "Content-Length",
"value": "300"
},
{
"name": "ETag",
"value": "W/\"12c-1pyB4v4mv3hdBoU+8cUmx4p37qI\""
},
{
"name": "Vary",
"value": "Accept-Encoding"
},
{
"name": "set-cookie",
"value": "sails.sid=s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk; Path=/; HttpOnly"
},
{
"name": "Connection",
"value": "keep-alive"
}
],
"content": {
"size": 300,
"mimeType": "application/json; charset=utf-8",
"text": "eyJhcmdzIjp7ImZvbzEiOiJIRG5ZOCIsImZvbzIiOiIzNC41In0sImhlYWRlcnMiOnsieC1mb3J3YXJkZWQtcHJvdG8iOiJodHRwcyIsIngtZm9yd2FyZGVkLXBvcnQiOiI0NDMiLCJob3N0IjoicG9zdG1hbi1lY2hvLmNvbSIsIngtYW16bi10cmFjZS1pZCI6IlJvb3Q9MS02MTY5NzQxYi01YjgyNTRjZTZjZThlNTU2NTRiNzc3MmQiLCJ1c2VyLWFnZW50IjoiSHR0cEJvb21lciIsImFjY2VwdC1lbmNvZGluZyI6Imd6aXAifSwidXJsIjoiaHR0cHM6Ly9wb3N0bWFuLWVjaG8uY29tL2dldD9mb28xPUhEblk4JmZvbzI9MzQuNSJ9",
"encoding": "base64"
},
"redirectURL": null,
"headersSize": 0,
"bodySize": 300
},
"serverIPAddress": "44.193.31.23",
"cache": {},
"timings": {
"dns": 105,
"connect": 1108,
"ssl": 721,
"send": 1,
"wait": 312,
"receive": 2
}
},
{
"startedDateTime": "2021-10-15T20:29:16.120+08:00",
"time": 306,
"request": {
"method": "POST",
"url": "https://postman-echo.com/post",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "sails.sid",
"value": "s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk"
}
],
"headers": [
{
"name": "Host",
"value": "postman-echo.com"
},
{
"name": "User-Agent",
"value": "Go-http-client/1.1"
},
{
"name": "Content-Length",
"value": "28"
},
{
"name": "Content-Type",
"value": "application/json; charset=UTF-8"
},
{
"name": "Cookie",
"value": "sails.sid=s%3Az_LpglkKxTvJ_eHVUH6V67drKp0AGWW-.PidabaXOnatLRP47hVyqqepl6BdrpEQzRlJQXtbIiwk"
},
{
"name": "Accept-Encoding",
"value": "gzip"
}
],
"queryString": [],
"postData": {
"mimeType": "application/json; charset=UTF-8",
"text": "{\"foo1\":\"HDnY8\",\"foo2\":12.3}"
},
"headersSize": 269,
"bodySize": 28
},
"response": {
"_charlesStatus": "COMPLETE",
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "sails.sid",
"value": "s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw",
"path": "/",
"domain": null,
"expires": null,
"httpOnly": true,
"secure": false,
"comment": null,
"_maxAge": null
}
],
"headers": [
{
"name": "Date",
"value": "Fri, 15 Oct 2021 12:29:16 GMT"
},
{
"name": "Content-Type",
"value": "application/json; charset=utf-8"
},
{
"name": "Content-Length",
"value": "526"
},
{
"name": "ETag",
"value": "W/\"20e-aXqJ0H6Q30sU41c/D7asB+yXWeQ\""
},
{
"name": "Vary",
"value": "Accept-Encoding"
},
{
"name": "set-cookie",
"value": "sails.sid=s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw; Path=/; HttpOnly"
},
{
"name": "Connection",
"value": "keep-alive"
}
],
"content": {
"size": 526,
"mimeType": "application/json; charset=utf-8",
"text": "eyJhcmdzIjp7fSwiZGF0YSI6eyJmb28xIjoiSERuWTgiLCJmb28yIjoxMi4zfSwiZmlsZXMiOnt9LCJmb3JtIjp7fSwiaGVhZGVycyI6eyJ4LWZvcndhcmRlZC1wcm90byI6Imh0dHBzIiwieC1mb3J3YXJkZWQtcG9ydCI6IjQ0MyIsImhvc3QiOiJwb3N0bWFuLWVjaG8uY29tIiwieC1hbXpuLXRyYWNlLWlkIjoiUm9vdD0xLTYxNjk3NDFjLTIxN2RiMGI3MWFkYjgwYmQ3ODUxOTI2OCIsImNvbnRlbnQtbGVuZ3RoIjoiMjgiLCJ1c2VyLWFnZW50IjoiR28taHR0cC1jbGllbnQvMS4xIiwiY29udGVudC10eXBlIjoiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIsImNvb2tpZSI6InNhaWxzLnNpZD1zJTNBel9McGdsa0t4VHZKX2VIVlVINlY2N2RyS3AwQUdXVy0uUGlkYWJhWE9uYXRMUlA0N2hWeXFxZXBsNkJkcnBFUXpSbEpRWHRiSWl3ayIsImFjY2VwdC1lbmNvZGluZyI6Imd6aXAifSwianNvbiI6eyJmb28xIjoiSERuWTgiLCJmb28yIjoxMi4zfSwidXJsIjoiaHR0cHM6Ly9wb3N0bWFuLWVjaG8uY29tL3Bvc3QifQ==",
"encoding": "base64"
},
"redirectURL": null,
"headersSize": 0,
"bodySize": 526
},
"serverIPAddress": "44.193.31.23",
"cache": {},
"timings": {
"dns": -1,
"connect": -1,
"ssl": -1,
"send": 1,
"wait": 304,
"receive": 1
}
},
{
"startedDateTime": "2021-10-15T20:29:16.427+08:00",
"time": 305,
"request": {
"method": "POST",
"url": "https://postman-echo.com/post",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "sails.sid",
"value": "s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw"
}
],
"headers": [
{
"name": "Host",
"value": "postman-echo.com"
},
{
"name": "User-Agent",
"value": "Go-http-client/1.1"
},
{
"name": "Content-Length",
"value": "20"
},
{
"name": "Content-Type",
"value": "application/x-www-form-urlencoded; charset=UTF-8"
},
{
"name": "Cookie",
"value": "sails.sid=s%3AS5e7w0zQ0xAsCwh9L8T6R7QLYCO7_gtD.r8%2B2w9IWqEIfuVkrZjnxzm2xADIk34zKAWXRPapr%2FAw"
},
{
"name": "Accept-Encoding",
"value": "gzip"
}
],
"queryString": [],
"postData": {
"mimeType": "application/x-www-form-urlencoded; charset=UTF-8",
"params": [
{
"name": "foo1",
"value": "HDnY8"
},
{
"name": "foo2",
"value": "12.3"
}
]
},
"headersSize": 290,
"bodySize": 20
},
"response": {
"_charlesStatus": "COMPLETE",
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"cookies": [
{
"name": "sails.sid",
"value": "s%3AMp2gGgeCCDM4sRS_MfL1q-hAkL3bAk84.9XT7TTW8QzueQqtQ6bQM%2BgHqiUBbkJSfgM5CbfhFreQ",
"path": "/",
"domain": null,
"expires": null,
"httpOnly": true,
"secure": false,
"comment": null,
"_maxAge": null
}
],
"headers": [
{
"name": "Date",
"value": "Fri, 15 Oct 2021 12:29:16 GMT"
},
{
"name": "Content-Type",
"value": "application/json; charset=utf-8"
},
{
"name": "Content-Length",
"value": "551"
},
{
"name": "ETag",
"value": "W/\"227-micuvGYwtEZN542D1sTL0hAZaRs\""
},
{
"name": "Vary",
"value": "Accept-Encoding"
},
{
"name": "set-cookie",
"value": "sails.sid=s%3AMp2gGgeCCDM4sRS_MfL1q-hAkL3bAk84.9XT7TTW8QzueQqtQ6bQM%2BgHqiUBbkJSfgM5CbfhFreQ; Path=/; HttpOnly"
},
{
"name": "Connection",
"value": "keep-alive"
}
],
"content": {
"size": 551,
"mimeType": "application/json; charset=utf-8",
"text": "eyJhcmdzIjp7fSwiZGF0YSI6IiIsImZpbGVzIjp7fSwiZm9ybSI6eyJmb28xIjoiSERuWTgiLCJmb28yIjoiMTIuMyJ9LCJoZWFkZXJzIjp7IngtZm9yd2FyZGVkLXByb3RvIjoiaHR0cHMiLCJ4LWZvcndhcmRlZC1wb3J0IjoiNDQzIiwiaG9zdCI6InBvc3RtYW4tZWNoby5jb20iLCJ4LWFtem4tdHJhY2UtaWQiOiJSb290PTEtNjE2OTc0MWMtNWI5ZDEyMWI2N2FlZTI0MTUyMmQzMjE2IiwiY29udGVudC1sZW5ndGgiOiIyMCIsInVzZXItYWdlbnQiOiJHby1odHRwLWNsaWVudC8xLjEiLCJjb250ZW50LXR5cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLCJjb29raWUiOiJzYWlscy5zaWQ9cyUzQVM1ZTd3MHpRMHhBc0N3aDlMOFQ2UjdRTFlDTzdfZ3RELnI4JTJCMnc5SVdxRUlmdVZrclpqbnh6bTJ4QURJazM0ektBV1hSUGFwciUyRkF3IiwiYWNjZXB0LWVuY29kaW5nIjoiZ3ppcCJ9LCJqc29uIjp7ImZvbzEiOiJIRG5ZOCIsImZvbzIiOiIxMi4zIn0sInVybCI6Imh0dHBzOi8vcG9zdG1hbi1lY2hvLmNvbS9wb3N0In0=",
"encoding": "base64"
},
"redirectURL": null,
"headersSize": 0,
"bodySize": 551
},
"serverIPAddress": "44.193.31.23",
"cache": {},
"timings": {
"dns": -1,
"connect": -1,
"ssl": -1,
"send": 0,
"wait": 303,
"receive": 2
}
}
]
}
}

View File

@@ -1 +0,0 @@
# NOTICE: Generated By HttpRunner. DO NOT EDIT!

View File

@@ -1 +0,0 @@
HttpRunner is an open source API testing tool that supports HTTP(S)/HTTP2/WebSocket/RPC network protocols, covering API testing, performance testing and digital experience monitoring (DEM) test types. Enjoy!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 KiB

View File

@@ -1,498 +0,0 @@
{
"info": {
"_postman_id": "0417a445-b206-4ea2-b1d2-5441afd6c6b9",
"name": "postman collection demo",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "folder1",
"item": [
{
"name": "folder2",
"item": [
{
"name": "Get with params",
"request": {
"method": "GET",
"header": [],
"url": {
"raw": "https://postman-echo.com/:path?k1=v1&k2=v2",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"query": [
{
"key": "k1",
"value": "v1"
},
{
"key": "k2",
"value": "v2"
},
{
"key": "k3",
"value": "v3",
"disabled": true
}
],
"variable": [
{
"key": "path",
"value": "get"
}
]
}
},
"response": [
{
"name": "Get with params case1",
"originalRequest": {
"method": "GET",
"header": [],
"url": {
"raw": "https://postman-echo.com/:path?k1=v1&k2=v2",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"query": [
{
"key": "k1",
"value": "v1"
},
{
"key": "k2",
"value": "v2"
},
{
"key": "k3",
"value": "v3",
"disabled": true
}
],
"variable": [
{
"key": "path",
"value": "get"
}
]
}
},
"status": "OK",
"code": 200,
"_postman_previewlanguage": "json",
"header": [
{
"key": "Date",
"value": "Mon, 16 May 2022 12:12:28 GMT"
},
{
"key": "Content-Type",
"value": "application/json; charset=utf-8"
},
{
"key": "Content-Length",
"value": "508"
},
{
"key": "Connection",
"value": "keep-alive"
},
{
"key": "ETag",
"value": "W/\"1fc-x4EIPFQzoLX0HenCFPx6HNfG0lc\""
},
{
"key": "Vary",
"value": "Accept-Encoding"
},
{
"key": "set-cookie",
"value": "sails.sid=s%3AX2aa_Z7gbcUqIWAjlBkytBRmQ4WCvc3D.pX9Qxh8aO9Ict0BL4CrRhdDJmz81UVmwFsV5Nx30Ils; Path=/; HttpOnly"
}
],
"cookie": [],
"body": "{\n \"args\": {\n \"k1\": \"v1\",\n \"k2\": \"v2\"\n },\n \"headers\": {\n \"x-forwarded-proto\": \"https\",\n \"x-forwarded-port\": \"443\",\n \"host\": \"postman-echo.com\",\n \"user-agent\": \"PostmanRuntime/7.29.0\",\n \"accept\": \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"cookie\": \"Cookie_1=c1; Cookie_2=c2; sails.sid=s%3AGX6aS9b_phvUSUk66w7ZBgWuOPI7IIKT.ayEGTaW4U35eAWyPz%2Fh6Q74DonNcbqw3H5Q5Zv%2BfKMY\"\n },\n \"url\": \"https://postman-echo.com/get?k1=v1&k2=v2\"\n}"
},
{
"name": "Get with params case2",
"originalRequest": {
"method": "GET",
"header": [],
"url": {
"raw": "https://postman-echo.com/:path?k1=v1&k3=v3",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"query": [
{
"key": "k1",
"value": "v1"
},
{
"key": "k2",
"value": "v2",
"disabled": true
},
{
"key": "k3",
"value": "v3"
}
],
"variable": [
{
"key": "path",
"value": "get"
}
]
}
},
"status": "OK",
"code": 200,
"_postman_previewlanguage": "json",
"header": [
{
"key": "Date",
"value": "Mon, 16 May 2022 12:14:04 GMT"
},
{
"key": "Content-Type",
"value": "application/json; charset=utf-8"
},
{
"key": "Content-Length",
"value": "504"
},
{
"key": "Connection",
"value": "keep-alive"
},
{
"key": "ETag",
"value": "W/\"1f8-tMaKs4xmwr+3su3I8mcgR0p+ucw\""
},
{
"key": "Vary",
"value": "Accept-Encoding"
},
{
"key": "set-cookie",
"value": "sails.sid=s%3AMNuX_i0KgaP_KuuMpYB8RtCNipCGJWVw.4ETfPHxE81Omqb6Yli%2FezUU8CXyYBcN3%2Bxkx5htwh8Y; Path=/; HttpOnly"
}
],
"cookie": [],
"body": "{\n \"args\": {\n \"k1\": \"v1\",\n \"k3\": \"v3\"\n },\n \"headers\": {\n \"x-forwarded-proto\": \"https\",\n \"x-forwarded-port\": \"443\",\n \"host\": \"postman-echo.com\",\n \"user-agent\": \"PostmanRuntime/7.29.0\",\n \"accept\": \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\",\n \"cookie\": \"Cookie_1=c1; Cookie_2=c2; sails.sid=s%3AX2aa_Z7gbcUqIWAjlBkytBRmQ4WCvc3D.pX9Qxh8aO9Ict0BL4CrRhdDJmz81UVmwFsV5Nx30Ils\"\n },\n \"url\": \"https://postman-echo.com/get?k1=v1&k3=v3\"\n}"
}
]
}
]
}
]
},
{
"name": "folder3",
"item": [
{
"name": "Post form-data",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "formdata",
"formdata": [
{
"key": "k1",
"value": "v1",
"type": "text"
},
{
"key": "k2",
"value": "v2",
"type": "text"
},
{
"key": "k3",
"value": "v3",
"type": "text",
"disabled": true
},
{
"key": "intro_key",
"type": "file",
"src": "intro.txt"
},
{
"key": "logo_key",
"type": "file",
"src": "logo.jpeg"
}
]
},
"url": {
"raw": "https://postman-echo.com/:path",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"variable": [
{
"key": "path",
"value": "post"
}
]
}
},
"response": []
},
{
"name": "Post x-www-form-urlencoded",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "urlencoded",
"urlencoded": [
{
"key": "k1",
"value": "v1",
"type": "text"
},
{
"key": "k2",
"value": "v2",
"type": "text"
},
{
"key": "k3",
"value": "v3",
"type": "text",
"disabled": true
}
]
},
"url": {
"raw": "https://postman-echo.com/:path",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"variable": [
{
"key": "path",
"value": "post"
}
]
}
},
"response": []
},
{
"name": "Post raw json",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "{\n \"k1\": \"v1\",\n \"k2\": \"v2\"\n}",
"options": {
"raw": {
"language": "json"
}
}
},
"url": {
"raw": "https://postman-echo.com/:path",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"variable": [
{
"key": "path",
"value": "post"
}
]
}
},
"response": []
},
{
"name": "Post raw text",
"request": {
"method": "POST",
"header": [],
"body": {
"mode": "raw",
"raw": "have a nice day",
"options": {
"raw": {
"language": "text"
}
}
},
"url": {
"raw": "https://postman-echo.com/:path",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"variable": [
{
"key": "path",
"value": "post"
}
]
}
},
"response": []
}
]
},
{
"name": "Get request headers",
"request": {
"method": "GET",
"header": [
{
"key": "User-Agent",
"value": "HttpRunner",
"type": "text"
},
{
"key": "User-Name",
"value": "bbx",
"type": "text",
"disabled": true
},
{
"key": "Connection",
"value": "close",
"type": "text"
}
],
"url": {
"raw": "https://postman-echo.com/:path",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"variable": [
{
"key": "path",
"value": "headers"
}
]
}
},
"response": [
{
"name": "Get request headers case1",
"originalRequest": {
"method": "GET",
"header": [
{
"key": "User-Agent",
"value": "HttpRunner",
"type": "text"
},
{
"key": "User-Name",
"value": "bbx",
"type": "text",
"disabled": true
},
{
"key": "Cookie",
"value": "Cookie_1=c1; Cookie_2=c2; sails.sid=s%3AGX6aS9b_phvUSUk66w7ZBgWuOPI7IIKT.ayEGTaW4U35eAWyPz%2Fh6Q74DonNcbqw3H5Q5Zv%2BfKMY",
"type": "text"
}
],
"url": {
"raw": "https://postman-echo.com/:path",
"protocol": "https",
"host": [
"postman-echo",
"com"
],
"path": [
":path"
],
"variable": [
{
"key": "path",
"value": "headers"
}
]
}
},
"status": "OK",
"code": 200,
"_postman_previewlanguage": "json",
"header": [
{
"key": "Date",
"value": "Mon, 16 May 2022 12:14:25 GMT"
},
{
"key": "Content-Type",
"value": "application/json; charset=utf-8"
},
{
"key": "Content-Length",
"value": "541"
},
{
"key": "Connection",
"value": "keep-alive"
},
{
"key": "ETag",
"value": "W/\"21d-ld5UvFTaRM6lihVnvCj6mZm5Of0\""
},
{
"key": "Vary",
"value": "Accept-Encoding"
}
],
"cookie": [],
"body": "{\n \"headers\": {\n \"x-forwarded-proto\": \"https\",\n \"x-forwarded-port\": \"443\",\n \"host\": \"postman-echo.com\",\n \"user-agent\": \"HttpRunner\",\n \"cookie\": \"Cookie_1=c1; Cookie_2=c2; sails.sid=s%3AGX6aS9b_phvUSUk66w7ZBgWuOPI7IIKT.ayEGTaW4U35eAWyPz%2Fh6Q74DonNcbqw3H5Q5Zv%2BfKMY\",\n \"accept\": \"*/*\",\n \"accept-encoding\": \"gzip, deflate, br\"\n }\n}"
}
]
}
]
}

View File

@@ -1,4 +0,0 @@
headers:
Content-Type: "application/x-www-form-urlencoded"
cookies:
UserName: "debugtalk"

View File

@@ -1,5 +0,0 @@
override: true
headers:
Content-Type: "application/x-www-form-urlencoded"
cookies:
UserName: "debugtalk"

Binary file not shown.

View File

@@ -1 +0,0 @@
# NOTICE: Generated By HttpRunner. DO NOT EDIT!

View File

@@ -1,4 +0,0 @@
username,password
test1,111111
test2,222222
test3,333333
1 username password
2 test1 111111
3 test2 222222
4 test3 333333

View File

@@ -1,89 +0,0 @@
config:
name: basic test with httpbin
base_url: ${get_httpbin_server()}
teststeps:
-
name: headers
request:
url: /headers
method: GET
validate:
- eq: ["status_code", 200]
- eq: [body.headers.Host, "127.0.0.1"]
-
name: user-agent
request:
url: /user-agent
method: GET
validate:
- eq: ["status_code", 200]
- startswith: [body."user-agent", "python-requests"]
-
name: get without params
request:
url: /get
method: GET
validate:
- eq: ["status_code", 200]
- eq: [body.args, {}]
-
name: get with params in url
request:
url: /get?a=1&b=2
method: GET
validate:
- eq: ["status_code", 200]
- eq: [body.args, {'a': '1', 'b': '2'}]
-
name: get with params in params field
request:
url: /get
params:
a: 1
b: 2
method: GET
validate:
- eq: ["status_code", 200]
- eq: [body.args, {'a': '1', 'b': '2'}]
-
name: set cookie
request:
url: /cookies/set?name=value
method: GET
validate:
- eq: ["status_code", 200]
- eq: [body.cookies.name, "value"]
-
name: extract cookie
request:
url: /cookies
method: GET
validate:
- eq: ["status_code", 200]
- eq: [body.cookies.name, "value"]
-
name: post data
request:
url: /post
method: POST
headers:
Content-Type: application/json
data: abc
validate:
- eq: ["status_code", 200]
-
name: validate body length
request:
url: /spec.json
method: GET
validate:
- len_eq: ["body", 9]

View File

@@ -1,79 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: basic.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseBasic(HttpRunner):
config = Config("basic test with httpbin").base_url("${get_httpbin_server()}")
teststeps = [
Step(
RunRequest("headers")
.get("/headers")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.headers.Host", "127.0.0.1")
),
Step(
RunRequest("user-agent")
.get("/user-agent")
.validate()
.assert_equal("status_code", 200)
.assert_startswith('body."user-agent"', "python-requests")
),
Step(
RunRequest("get without params")
.get("/get")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args", {})
),
Step(
RunRequest("get with params in url")
.get("/get?a=1&b=2")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args", {"a": "1", "b": "2"})
),
Step(
RunRequest("get with params in params field")
.get("/get")
.with_params(**{"a": 1, "b": 2})
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args", {"a": "1", "b": "2"})
),
Step(
RunRequest("set cookie")
.get("/cookies/set?name=value")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.cookies.name", "value")
),
Step(
RunRequest("extract cookie")
.get("/cookies")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.cookies.name", "value")
),
Step(
RunRequest("post data")
.post("/post")
.with_headers(**{"Content-Type": "application/json"})
.with_data("abc")
.validate()
.assert_equal("status_code", 200)
),
Step(
RunRequest("validate body length")
.get("/spec.json")
.validate()
.assert_length_equal("body", 9)
),
]
if __name__ == "__main__":
TestCaseBasic().test_start()

View File

@@ -1,148 +0,0 @@
import os
import random
import string
import time
import uuid
from loguru import logger
from httprunner.utils import HTTP_BIN_URL
def get_httpbin_server():
return HTTP_BIN_URL
def setup_testcase(variables):
logger.info(f"setup_testcase, variables: {variables}")
variables["request_id_prefix"] = str(int(time.time()))
def teardown_testcase():
logger.info("teardown_testcase.")
def setup_teststep(request, variables):
logger.info(f"setup_teststep, request: {request}, variables: {variables}")
request.setdefault("headers", {})
request_id_prefix = variables["request_id_prefix"]
request["headers"]["HRUN-Request-ID"] = request_id_prefix + "-" + str(uuid.uuid4())
def teardown_teststep(response):
logger.info(f"teardown_teststep, response status code: {response.status_code}")
def sum_two(m, n):
return m + n
def sum_status_code(status_code, expect_sum):
"""sum status code digits
e.g. 400 => 4, 201 => 3
"""
sum_value = 0
for digit in str(status_code):
sum_value += int(digit)
assert sum_value == expect_sum
def is_status_code_200(status_code):
return status_code == 200
os.environ["TEST_ENV"] = "PRODUCTION"
def skip_test_in_production_env():
"""skip this test in production environment"""
return os.environ["TEST_ENV"] == "PRODUCTION"
def get_user_agent():
return ["iOS/10.1", "iOS/10.2"]
def gen_app_version():
return [{"app_version": "2.8.5"}, {"app_version": "2.8.6"}]
def get_account():
return [
{"username": "user1", "password": "111111"},
{"username": "user2", "password": "222222"},
]
def get_account_in_tuple():
return [("user1", "111111"), ("user2", "222222")]
def gen_random_string(str_len):
random_char_list = []
for _ in range(str_len):
random_char = random.choice(string.ascii_letters + string.digits)
random_char_list.append(random_char)
random_string = "".join(random_char_list)
return random_string
def setup_hook_add_kwargs(request):
request["key"] = "value"
def setup_hook_remove_kwargs(request):
request.pop("key")
def teardown_hook_sleep_N_secs(response, n_secs):
"""sleep n seconds after request"""
if response.status_code == 200:
time.sleep(0.1)
else:
time.sleep(n_secs)
def hook_print(msg):
print(msg)
def modify_request_json(request, os_platform):
request["json"]["os_platform"] = os_platform
def setup_hook_httpntlmauth(request):
if "httpntlmauth" in request:
from requests_ntlm import HttpNtlmAuth
auth_account = request.pop("httpntlmauth")
request["auth"] = HttpNtlmAuth(
auth_account["username"], auth_account["password"]
)
def alter_response(response):
response.status_code = 500
response.headers["Content-Type"] = "html/text"
response.body["headers"]["Host"] = "127.0.0.1:8888"
response.new_attribute = "new_attribute_value"
response.new_attribute_dict = {"key": 123}
def alter_response_302(response):
response.status_code = 500
response.headers["Content-Type"] = "html/text"
response.text = "abcdef"
response.new_attribute = "new_attribute_value"
response.new_attribute_dict = {"key": 123}
def alter_response_error(response):
# NameError
not_defined_variable
def gen_variables():
return {"var_a": 1, "var_b": 2}

View File

@@ -1,36 +0,0 @@
config:
name: basic test with httpbin
base_url: ${get_httpbin_server()}
setup_hooks:
- ${hook_print(setup)}
teardown_hooks:
- ${hook_print(teardown)}
teststeps:
-
name: headers
variables:
a: 123
request:
url: /headers
method: GET
setup_hooks:
- ${setup_hook_add_kwargs($request)}
- ${setup_hook_remove_kwargs($request)}
teardown_hooks:
- ${teardown_hook_sleep_N_secs($response, 1)}
validate:
- eq: ["status_code", 200]
- contained_by: [body.headers.Host, "${get_httpbin_server()}"]
-
name: alter response
request:
url: /headers
method: GET
teardown_hooks:
- ${alter_response($response)}
validate:
- eq: ["status_code", 500]
- eq: [headers."Content-Type", "html/text"]
- eq: [body.headers.Host, "127.0.0.1:8888"]

View File

@@ -1,35 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: hooks.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseHooks(HttpRunner):
config = Config("basic test with httpbin").base_url("${get_httpbin_server()}")
teststeps = [
Step(
RunRequest("headers")
.with_variables(**{"a": 123})
.setup_hook("${setup_hook_add_kwargs($request)}")
.setup_hook("${setup_hook_remove_kwargs($request)}")
.get("/headers")
.teardown_hook("${teardown_hook_sleep_N_secs($response, 1)}")
.validate()
.assert_equal("status_code", 200)
.assert_contained_by("body.headers.Host", "${get_httpbin_server()}")
),
Step(
RunRequest("alter response")
.get("/headers")
.teardown_hook("${alter_response($response)}")
.validate()
.assert_equal("status_code", 500)
.assert_equal('headers."Content-Type"', "html/text")
.assert_equal("body.headers.Host", "127.0.0.1:8888")
),
]
if __name__ == "__main__":
TestCaseHooks().test_start()

View File

@@ -1,37 +0,0 @@
config:
name: load images
base_url: ${get_httpbin_server()}
teststeps:
-
name: get png image
request:
url: /image/png
method: GET
validate:
- eq: ["status_code", 200]
-
name: get jpeg image
request:
url: /image/jpeg
method: GET
validate:
- eq: ["status_code", 200]
-
name: get webp image
request:
url: /image/webp
method: GET
validate:
- eq: ["status_code", 200]
-
name: get svg image
request:
url: /image/svg
method: GET
validate:
- eq: ["status_code", 200]

View File

@@ -1,39 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: load_image.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseLoadImage(HttpRunner):
config = Config("load images").base_url("${get_httpbin_server()}")
teststeps = [
Step(
RunRequest("get png image")
.get("/image/png")
.validate()
.assert_equal("status_code", 200)
),
Step(
RunRequest("get jpeg image")
.get("/image/jpeg")
.validate()
.assert_equal("status_code", 200)
),
Step(
RunRequest("get webp image")
.get("/image/webp")
.validate()
.assert_equal("status_code", 200)
),
Step(
RunRequest("get svg image")
.get("/image/svg")
.validate()
.assert_equal("status_code", 200)
),
]
if __name__ == "__main__":
TestCaseLoadImage().test_start()

View File

@@ -1,4 +0,0 @@
UserName=test
Password=654321
PROJECT_KEY=AAABBBCCC
content_type=application/json; charset=UTF-8

View File

@@ -1,30 +0,0 @@
config:
name: test upload file with httpbin
base_url: ${get_httpbin_server()}
teststeps:
-
name: upload file
variables:
file_path: "test.env"
m_encoder: ${multipart_encoder(file=$file_path)}
request:
url: /post
method: POST
headers:
Content-Type: ${multipart_content_type($m_encoder)}
data: $m_encoder
validate:
- eq: ["status_code", 200]
- startswith: ["body.files.file", "UserName=test"]
-
name: upload file with keyword
request:
url: /post
method: POST
upload:
file: "test.env"
validate:
- eq: ["status_code", 200]
- startswith: ["body.files.file", "UserName=test"]

View File

@@ -1,38 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: upload.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseUpload(HttpRunner):
config = Config("test upload file with httpbin").base_url("${get_httpbin_server()}")
teststeps = [
Step(
RunRequest("upload file")
.with_variables(
**{
"file_path": "test.env",
"m_encoder": "${multipart_encoder(file=$file_path)}",
}
)
.post("/post")
.with_headers(**{"Content-Type": "${multipart_content_type($m_encoder)}"})
.with_data("$m_encoder")
.validate()
.assert_equal("status_code", 200)
.assert_startswith("body.files.file", "UserName=test")
),
Step(
RunRequest("upload file with keyword")
.post("/post")
.upload(**{"file": "test.env"})
.validate()
.assert_equal("status_code", 200)
.assert_startswith("body.files.file", "UserName=test")
),
]
if __name__ == "__main__":
TestCaseUpload().test_start()

View File

@@ -1,4 +0,0 @@
user_agent
iOS/10.1
iOS/10.2
iOS/10.3
1 user_agent
2 iOS/10.1
3 iOS/10.2
4 iOS/10.3

View File

@@ -1,35 +0,0 @@
config:
name: basic test with httpbin
base_url: ${get_httpbin_server()}
teststeps:
-
name: validate response with json path
request:
url: /get
params:
a: 1
b: 2
method: GET
validate:
- eq: ["status_code", 200]
- eq: ["body.args.a", "1"]
- eq: ["body.args.b", "2"]
validate_script:
- "assert status_code == 200"
-
name: validate response with python script
request:
url: /get
params:
a: 1
b: 2
method: GET
validate:
- eq: ["status_code", 200]
validate_script:
- "assert status_code == 201"
- "a = response_json.get('args').get('a')"
- "assert a == '1'"

View File

@@ -1,31 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: validate.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseValidate(HttpRunner):
config = Config("basic test with httpbin").base_url("${get_httpbin_server()}")
teststeps = [
Step(
RunRequest("validate response with json path")
.get("/get")
.with_params(**{"a": 1, "b": 2})
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.a", "1")
.assert_equal("body.args.b", "2")
),
Step(
RunRequest("validate response with python script")
.get("/get")
.with_params(**{"a": 1, "b": 2})
.validate()
.assert_equal("status_code", 200)
),
]
if __name__ == "__main__":
TestCaseValidate().test_start()

View File

@@ -1,20 +0,0 @@
# NOTE: Generated By hrp v4.2.0, DO NOT EDIT!
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from debugtalk import *
if __name__ == "__main__":
import funppy
funppy.register("get_httprunner_version", get_httprunner_version)
funppy.register("sum_two", sum_two)
funppy.register("get_testcase_config_variables", get_testcase_config_variables)
funppy.register("get_testsuite_config_variables", get_testsuite_config_variables)
funppy.register("get_app_version", get_app_version)
funppy.register("calculate_two_nums", calculate_two_nums)
funppy.register("fake_rand_count", fake_rand_count)
funppy.serve()

View File

@@ -1,65 +0,0 @@
# NOTICE: Generated By HttpRunner.
import json
import os
import time
import pytest
from loguru import logger
from httprunner.utils import get_platform, ExtendJSONEncoder
@pytest.fixture(scope="session", autouse=True)
def session_fixture(request):
"""setup and teardown each task"""
logger.info("start running testcases ...")
start_at = time.time()
yield
logger.info("task finished, generate task summary for --save-tests")
summary = {
"success": True,
"stat": {
"testcases": {"total": 0, "success": 0, "fail": 0},
"teststeps": {"total": 0, "failures": 0, "successes": 0},
},
"time": {"start_at": start_at, "duration": time.time() - start_at},
"platform": get_platform(),
"details": [],
}
for item in request.node.items:
testcase_summary = item.instance.get_summary()
summary["success"] &= testcase_summary.success
summary["stat"]["testcases"]["total"] += 1
summary["stat"]["teststeps"]["total"] += len(testcase_summary.step_results)
if testcase_summary.success:
summary["stat"]["testcases"]["success"] += 1
summary["stat"]["teststeps"]["successes"] += len(
testcase_summary.step_results
)
else:
summary["stat"]["testcases"]["fail"] += 1
summary["stat"]["teststeps"]["successes"] += (
len(testcase_summary.step_results) - 1
)
summary["stat"]["teststeps"]["failures"] += 1
testcase_summary_json = testcase_summary.dict()
testcase_summary_json["records"] = testcase_summary_json.pop("step_results")
summary["details"].append(testcase_summary_json)
summary_path = os.path.join(
os.getcwd(), "examples/postman_echo/logs/request_methods/hardcode.summary.json"
)
summary_dir = os.path.dirname(summary_path)
os.makedirs(summary_dir, exist_ok=True)
with open(summary_path, "w", encoding="utf-8") as f:
json.dump(summary, f, indent=4, ensure_ascii=False, cls=ExtendJSONEncoder)
logger.info(f"generated task summary: {summary_path}")

View File

@@ -1 +0,0 @@
# NOTICE: Generated By HttpRunner. DO NOT EDIT!

View File

@@ -1,34 +0,0 @@
config:
name: "set & delete cookies."
base_url: "https://postman-echo.com"
verify: False
export: ["cookie_foo1"]
teststeps:
-
name: set cookie foo1 & foo2 & foo3
request:
method: GET
url: /cookies/set
params:
foo1: bar1
foo2: bar2
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
extract:
cookie_foo1: body.cookies.foo1
validate:
- eq: ["status_code", 200]
- eq: ["body.cookies.foo1", "bar1"]
- eq: ["body.cookies.foo2", "bar2"]
-
name: delete cookie foo2
request:
method: GET
url: /cookies/delete?foo2
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
validate:
- eq: ["status_code", 200]
- eq: ["body.cookies.foo1", "bar1"]
- eq: ["body.cookies.foo2", null]

View File

@@ -1,41 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: cookie_manipulation/hardcode.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseHardcode(HttpRunner):
config = (
Config("set & delete cookies.")
.base_url("https://postman-echo.com")
.verify(False)
.export(*["cookie_foo1"])
)
teststeps = [
Step(
RunRequest("set cookie foo1 & foo2 & foo3")
.get("/cookies/set")
.with_params(**{"foo1": "bar1", "foo2": "bar2"})
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.extract()
.with_jmespath("body.cookies.foo1", "cookie_foo1")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.cookies.foo1", "bar1")
.assert_equal("body.cookies.foo2", "bar2")
),
Step(
RunRequest("delete cookie foo2")
.get("/cookies/delete?foo2")
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.cookies.foo1", "bar1")
.assert_equal("body.cookies.foo2", None)
),
]
if __name__ == "__main__":
TestCaseHardcode().test_start()

View File

@@ -1,41 +0,0 @@
config:
name: "set & delete cookies."
variables:
foo1: bar1
foo2: bar2
base_url: "https://postman-echo.com"
verify: False
export: ["cookie_foo1", "cookie_foo3"]
teststeps:
-
name: set cookie foo1 & foo2 & foo3
variables:
foo3: bar3
request:
method: GET
url: /cookies/set
params:
foo1: bar111
foo2: $foo2
foo3: $foo3
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
extract:
cookie_foo1: $.cookies.foo1
cookie_foo3: $.cookies.foo3
validate:
- eq: ["status_code", 200]
- ne: ["$.cookies.foo3", "$foo3"]
-
name: delete cookie foo2
request:
method: GET
url: /cookies/delete?foo2
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
validate:
- eq: ["status_code", 200]
- ne: ["$.cookies.foo1", "$foo1"]
- eq: ["$.cookies.foo1", "$cookie_foo1"]
- eq: ["$.cookies.foo3", "$cookie_foo3"]

View File

@@ -1,44 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: cookie_manipulation/set_delete_cookies.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseSetDeleteCookies(HttpRunner):
config = (
Config("set & delete cookies.")
.variables(**{"foo1": "bar1", "foo2": "bar2"})
.base_url("https://postman-echo.com")
.verify(False)
.export(*["cookie_foo1", "cookie_foo3"])
)
teststeps = [
Step(
RunRequest("set cookie foo1 & foo2 & foo3")
.with_variables(**{"foo3": "bar3"})
.get("/cookies/set")
.with_params(**{"foo1": "bar111", "foo2": "$foo2", "foo3": "$foo3"})
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.extract()
.with_jmespath("$.cookies.foo1", "cookie_foo1")
.with_jmespath("$.cookies.foo3", "cookie_foo3")
.validate()
.assert_equal("status_code", 200)
.assert_not_equal("$.cookies.foo3", "$foo3")
),
Step(
RunRequest("delete cookie foo2")
.get("/cookies/delete?foo2")
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.validate()
.assert_equal("status_code", 200)
.assert_not_equal("$.cookies.foo1", "$foo1")
.assert_equal("$.cookies.foo1", "$cookie_foo1")
.assert_equal("$.cookies.foo3", "$cookie_foo3")
),
]
if __name__ == "__main__":
TestCaseSetDeleteCookies().test_start()

View File

@@ -1,42 +0,0 @@
from httprunner import __version__
def get_httprunner_version():
return __version__
def sum_two(m, n):
return m + n
def get_testcase_config_variables():
return {"foo1": "testcase_config_bar1", "foo2": "testcase_config_bar2"}
def get_testsuite_config_variables():
return {"foo1": "testsuite_config_bar1", "foo2": "testsuite_config_bar2"}
def get_app_version():
return [3.1, 3.0]
def calculate_two_nums(a, b=1):
return [a + b, b - a]
def fake_rand_count():
"""
return 1 at first call
return 2 at second call
"""
l = []
def func():
l.append(1)
return len(l)
return func
fake_randnum = fake_rand_count()

View File

@@ -1 +0,0 @@
# NOTICE: Generated By HttpRunner. DO NOT EDIT!

View File

@@ -1,4 +0,0 @@
username,password
test1,111111
test2,222222
test3,333333
1 username password
2 test1 111111
3 test2 222222
4 test3 333333

View File

@@ -1,61 +0,0 @@
import uuid
from typing import List
import pytest
from httprunner import Config, Step
from loguru import logger
@pytest.fixture(scope="session", autouse=True)
def session_fixture(request):
"""setup and teardown each task"""
total_testcases_num = request.node.testscollected
testcases = []
for item in request.node.items:
testcase = {
"name": item.cls.config.name,
"path": item.cls.config.path,
"node_id": item.nodeid,
}
testcases.append(testcase)
logger.debug(f"collected {total_testcases_num} testcases: {testcases}")
yield
logger.debug("teardown task fixture")
# teardown task
# TODO: upload task summary
@pytest.fixture(scope="function", autouse=True)
def testcase_fixture(request):
"""setup and teardown each testcase"""
config: Config = request.cls.config
teststeps: List[Step] = request.cls.teststeps
logger.debug(f"setup testcase fixture: {config.name} - {request.module.__name__}")
def update_request_headers(steps, index):
for teststep in steps:
if teststep.request:
index += 1
teststep.request.headers["X-Request-ID"] = f"{prefix}-{index}"
elif teststep.testcase and hasattr(teststep.testcase, "teststeps"):
update_request_headers(teststep.testcase.teststeps, index)
# you can update testcase teststep like this
prefix = f"HRUN-{uuid.uuid4()}"
update_request_headers(teststeps, 0)
yield
logger.debug(
f"teardown testcase fixture: {config.name} - {request.module.__name__}"
)
summary = request.instance.get_summary()
logger.debug(f"testcase result summary: {summary}")
# TODO: upload testcase summary

View File

@@ -1,55 +0,0 @@
config:
name: "request methods testcase in hardcode"
base_url: "https://postman-echo.com"
verify: False
teststeps:
-
name: get with params
request:
method: GET
url: /get
params:
foo1: bar1
foo2: bar2
headers:
:authority: postman-echo.com
:method: POST
:path: /get
:schema: https
User-Agent: HttpRunner/3.0
validate:
- eq: ["status_code", 200]
-
name: post raw text
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/3.0
Content-Type: "text/plain"
data: "This is expected to be sent back as part of response body."
validate:
- eq: ["status_code", 200]
-
name: post form data
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/3.0
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=bar1&foo2=bar2"
validate:
- eq: ["status_code", 200]
-
name: put request
request:
method: PUT
url: /put
headers:
User-Agent: HttpRunner/3.0
Content-Type: "text/plain"
data: "This is expected to be sent back as part of response body."
validate:
- eq: ["status_code", 200]

View File

@@ -1,68 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: request_methods/hardcode.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseHardcode(HttpRunner):
config = (
Config("request methods testcase in hardcode")
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunRequest("get with params")
.get("/get")
.with_params(**{"foo1": "bar1", "foo2": "bar2"})
.with_headers(
**{
":authority": "postman-echo.com",
":method": "POST",
":path": "/get",
":schema": "https",
"User-Agent": "HttpRunner/3.0",
}
)
.validate()
.assert_equal("status_code", 200)
),
Step(
RunRequest("post raw text")
.post("/post")
.with_headers(
**{"User-Agent": "HttpRunner/3.0", "Content-Type": "text/plain"}
)
.with_data("This is expected to be sent back as part of response body.")
.validate()
.assert_equal("status_code", 200)
),
Step(
RunRequest("post form data")
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/3.0",
"Content-Type": "application/x-www-form-urlencoded",
}
)
.with_data("foo1=bar1&foo2=bar2")
.validate()
.assert_equal("status_code", 200)
),
Step(
RunRequest("put request")
.put("/put")
.with_headers(
**{"User-Agent": "HttpRunner/3.0", "Content-Type": "text/plain"}
)
.with_data("This is expected to be sent back as part of response body.")
.validate()
.assert_equal("status_code", 200)
),
]
if __name__ == "__main__":
TestCaseHardcode().test_start()

View File

@@ -1,69 +0,0 @@
config:
name: "request methods testcase with functions"
variables:
foo1: config_bar1
foo2: config_bar2
expect_foo1: config_bar1
expect_foo2: config_bar2
base_url: "https://postman-echo.com"
verify: False
weight: 2
export: ["foo3"]
teststeps:
-
name: get with params
variables:
foo1: bar11
foo2: bar21
sum_v: "${sum_two(1, 2)}"
request:
method: GET
url: /get
params:
foo1: $foo1
foo2: $foo2
sum_v: $sum_v
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
extract:
foo3: "body.args.foo2"
validate:
- eq: ["status_code", 200]
- eq: ["body.args.foo1", "bar11"]
- eq: ["body.args.sum_v", "3"]
- eq: ["body.args.foo2", "bar21"]
-
name: post raw text
variables:
foo1: "bar12"
foo3: "bar32"
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
Content-Type: "text/plain"
data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
validate:
- eq: ["status_code", 200]
- eq: ["body.data", "This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32."]
- type_match: ["body.json", None]
- type_match: ["body.json", NoneType]
- type_match: ["body.json", null]
-
name: post form data
variables:
foo2: bar23
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo2&foo3=$foo3"
validate:
- eq: ["status_code", 200, "response status code should be 200"]
- eq: ["body.form.foo1", "$expect_foo1"]
- eq: ["body.form.foo2", "bar23"]
- eq: ["body.form.foo3", "bar21"]

View File

@@ -1,84 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: request_methods/request_with_functions.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseRequestWithFunctions(HttpRunner):
config = (
Config("request methods testcase with functions")
.variables(
**{
"foo1": "config_bar1",
"foo2": "config_bar2",
"expect_foo1": "config_bar1",
"expect_foo2": "config_bar2",
}
)
.base_url("https://postman-echo.com")
.verify(False)
.export(*["foo3"])
)
teststeps = [
Step(
RunRequest("get with params")
.with_variables(
**{"foo1": "bar11", "foo2": "bar21", "sum_v": "${sum_two(1, 2)}"}
)
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.extract()
.with_jmespath("body.args.foo2", "foo3")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.foo1", "bar11")
.assert_equal("body.args.sum_v", "3")
.assert_equal("body.args.foo2", "bar21")
),
Step(
RunRequest("post raw text")
.with_variables(**{"foo1": "bar12", "foo3": "bar32"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"Content-Type": "text/plain",
}
)
.with_data(
"This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
)
.validate()
.assert_equal("status_code", 200)
.assert_equal(
"body.data",
"This is expected to be sent back as part of response body: bar12-$expect_foo2-bar32.",
)
.assert_type_match("body.json", "None")
.assert_type_match("body.json", "NoneType")
.assert_type_match("body.json", None)
),
Step(
RunRequest("post form data")
.with_variables(**{"foo2": "bar23"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"Content-Type": "application/x-www-form-urlencoded",
}
)
.with_data("foo1=$foo1&foo2=$foo2&foo3=$foo3")
.validate()
.assert_equal("status_code", 200, "response status code should be 200")
.assert_equal("body.form.foo1", "$expect_foo1")
.assert_equal("body.form.foo2", "bar23")
.assert_equal("body.form.foo3", "bar21")
),
]
if __name__ == "__main__":
TestCaseRequestWithFunctions().test_start()

View File

@@ -1,33 +0,0 @@
config:
name: "request methods testcase: validate with parameters"
parameters:
user_agent: ["iOS/10.1", "iOS/10.2"]
username-password: ${parameterize(request_methods/account.csv)}
app_version: ${get_app_version()}
variables:
app_version: f1
base_url: "https://postman-echo.com"
verify: False
teststeps:
-
name: get with params
variables:
foo1: $username
foo2: $password
sum_v: "${sum_two(1, $app_version)}"
request:
method: GET
url: /get
params:
foo1: $foo1
foo2: $foo2
sum_v: $sum_v
headers:
User-Agent: $user_agent,$app_version
extract:
session_foo2: "body.args.foo2"
validate:
- eq: ["status_code", 200]
- str_eq: ["body.args.sum_v", "${sum_two(1, $app_version)}"]
# - less_than: ["body.args.sum_v", "${sum_two(2, 2)}"] FIXME: TypeError: '<' not supported between instances of 'str' and 'int'

View File

@@ -1,53 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: request_methods/request_with_parameters.yml
import pytest
from httprunner import HttpRunner, Config, Step, RunRequest
from httprunner import Parameters
class TestCaseRequestWithParameters(HttpRunner):
@pytest.mark.parametrize(
"param",
Parameters(
{
"user_agent": ["iOS/10.1", "iOS/10.2"],
"username-password": "${parameterize(request_methods/account.csv)}",
"app_version": "${get_app_version()}",
}
),
)
def test_start(self, param):
super().test_start(param)
config = (
Config("request methods testcase: validate with parameters")
.variables(**{"app_version": "f1"})
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunRequest("get with params")
.with_variables(
**{
"foo1": "$username",
"foo2": "$password",
"sum_v": "${sum_two(1, $app_version)}",
}
)
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
.with_headers(**{"User-Agent": "$user_agent,$app_version"})
.extract()
.with_jmespath("body.args.foo2", "session_foo2")
.validate()
.assert_equal("status_code", 200)
.assert_string_equals("body.args.sum_v", "${sum_two(1, $app_version)}")
),
]
if __name__ == "__main__":
TestCaseRequestWithParameters().test_start()

View File

@@ -1,31 +0,0 @@
# -*- coding: utf-8 -*-
"""
@Date : 2022/4/7
@File : request_with_retry.py
@Author : duanchao.bill
@Desc :
"""
from httprunner import HttpRunner, Config, Step, RunRequest, RunTestCase
class TestCaseRetry(HttpRunner):
config = (
Config("request methods testcase in hardcode")
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunRequest("run with retry")
.with_retry(retry_times=1, retry_interval=1)
.get("/get")
.with_params(**{"foo1": "${fake_randnum()}"})
.with_headers(**{"User-Agent": "HttpRunner/3.0"})
.validate()
.assert_equal("body.args.foo1", "2")
)
]

View File

@@ -1,37 +0,0 @@
config:
name: "request methods testcase: reference testcase"
variables:
foo1: testsuite_config_bar1
expect_foo1: testsuite_config_bar1
expect_foo2: config_bar2
base_url: "https://postman-echo.com"
verify: False
teststeps:
-
name: request with functions
variables:
foo1: testcase_ref_bar1
expect_foo1: testcase_ref_bar1
setup_hooks:
- ${sleep(0.1)}
testcase: request_methods/request_with_functions.yml
teardown_hooks:
- ${sleep(0.2)}
export:
- foo3
-
name: post form data
variables:
foo1: bar1
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo3"
validate:
- eq: ["status_code", 200]
- eq: ["body.form.foo1", "bar1"]
- eq: ["body.form.foo2", "bar21"]

View File

@@ -1,62 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: request_methods/request_with_testcase_reference.yml
from httprunner import HttpRunner, Config, Step, RunRequest
from httprunner import RunTestCase
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent))
from request_methods.request_with_functions_test import (
TestCaseRequestWithFunctions as RequestWithFunctions,
)
class TestCaseRequestWithTestcaseReference(HttpRunner):
config = (
Config("request methods testcase: reference testcase")
.variables(
**{
"foo1": "testsuite_config_bar1",
"expect_foo1": "testsuite_config_bar1",
"expect_foo2": "config_bar2",
}
)
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunTestCase("request with functions")
.with_variables(
**{"foo1": "testcase_ref_bar1", "expect_foo1": "testcase_ref_bar1"}
)
.setup_hook("${sleep(0.1)}")
.call(RequestWithFunctions)
.teardown_hook("${sleep(0.2)}")
.export(*["foo3"])
),
Step(
RunRequest("post form data")
.with_variables(**{"foo1": "bar1"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/${get_httprunner_version()}",
"Content-Type": "application/x-www-form-urlencoded",
}
)
.with_data("foo1=$foo1&foo2=$foo3")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.form.foo1", "bar1")
.assert_equal("body.form.foo2", "bar21")
),
]
if __name__ == "__main__":
TestCaseRequestWithTestcaseReference().test_start()

View File

@@ -1,78 +0,0 @@
config:
name: "request methods testcase with variables"
variables: ${get_testcase_config_variables()}
base_url: "https://postman-echo.com"
verify: False
teststeps:
-
name: get with params
variables:
foo1: bar11
foo2: bar21
request:
method: GET
url: /get
params:
foo1: $foo1
foo2: $foo2
headers:
User-Agent: HttpRunner/3.0
extract:
foo3: "body.args.foo2"
validate:
- eq: ["status_code", 200]
- eq: ["body.args.foo1", "bar11"]
- eq: ["body.args.foo2", "bar21"]
-
name: post raw text
variables:
foo1: "bar12"
foo3: "bar32"
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/3.0
Content-Type: "text/plain"
data: "This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
validate:
- eq: ["status_code", 200]
- eq: ["body.data", "This is expected to be sent back as part of response body: bar12-testcase_config_bar2-bar32."]
-
name: post form data
variables:
foo2: bar23
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/3.0
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo2&foo3=$foo3"
validate:
- eq: ["status_code", 200]
- eq: ["body.form.foo1", "testcase_config_bar1"]
- eq: ["body.form.foo2", "bar23"]
- eq: ["body.form.foo3", "bar21"]
-
name: post form data using json
variables:
foo2: bar23
jsondata:
foo1: $foo1
foo2: $foo2
foo3: $foo3
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/3.0
Content-Type: "application/json"
json: $jsondata
validate:
- eq: ["status_code", 200]
- eq: ["body.data.foo1", "testcase_config_bar1"]
- eq: ["body.data.foo2", "bar23"]
- eq: ["body.data.foo3", "bar21"]

View File

@@ -1,86 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: request_methods/request_with_variables.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseRequestWithVariables(HttpRunner):
config = (
Config("request methods testcase with variables")
.variables(**{"foo1": "testcase_config_bar1", "foo2": "testcase_config_bar2"})
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunRequest("get with params")
.with_variables(**{"foo1": "bar11", "foo2": "bar21"})
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2"})
.with_headers(**{"User-Agent": "HttpRunner/3.0"})
.extract()
.with_jmespath("body.args.foo2", "foo3")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.foo1", "bar11")
.assert_equal("body.args.foo2", "bar21")
),
Step(
RunRequest("post raw text")
.with_variables(**{"foo1": "bar12", "foo3": "bar32"})
.post("/post")
.with_headers(
**{"User-Agent": "HttpRunner/3.0", "Content-Type": "text/plain"}
)
.with_data(
"This is expected to be sent back as part of response body: $foo1-$foo2-$foo3."
)
.validate()
.assert_equal("status_code", 200)
.assert_equal(
"body.data",
"This is expected to be sent back as part of response body: bar12-testcase_config_bar2-bar32.",
)
),
Step(
RunRequest("post form data")
.with_variables(**{"foo2": "bar23"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/3.0",
"Content-Type": "application/x-www-form-urlencoded",
}
)
.with_data("foo1=$foo1&foo2=$foo2&foo3=$foo3")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.form.foo1", "testcase_config_bar1")
.assert_equal("body.form.foo2", "bar23")
.assert_equal("body.form.foo3", "bar21")
),
Step(
RunRequest("post form data using json")
.with_variables(
**{
"foo2": "bar23",
"jsondata": {"foo1": "$foo1", "foo2": "$foo2", "foo3": "$foo3"},
}
)
.post("/post")
.with_headers(
**{"User-Agent": "HttpRunner/3.0", "Content-Type": "application/json"}
)
.with_json("$jsondata")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.data.foo1", "testcase_config_bar1")
.assert_equal("body.data.foo2", "bar23")
.assert_equal("body.data.foo3", "bar21")
),
]
if __name__ == "__main__":
TestCaseRequestWithVariables().test_start()

View File

@@ -1,29 +0,0 @@
config:
name: "request methods testcase: validate with functions"
variables:
foo1: session_bar1
base_url: "https://postman-echo.com"
verify: False
teststeps:
-
name: get with params
variables:
foo1: bar1
foo2: session_bar2
sum_v: "${sum_two(1, 2)}"
request:
method: GET
url: /get
params:
foo1: $foo1
foo2: $foo2
sum_v: $sum_v
headers:
User-Agent: HttpRunner/${get_httprunner_version()}
extract:
session_foo2: "body.args.foo2"
validate:
- eq: ["status_code", 200]
- eq: ["body.args.sum_v", "3"]
# - less_than: ["body.args.sum_v", "${sum_two(2, 2)}"] FIXME: TypeError: '<' not supported between instances of 'str' and 'int'

View File

@@ -1,34 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: request_methods/validate_with_functions.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseValidateWithFunctions(HttpRunner):
config = (
Config("request methods testcase: validate with functions")
.variables(**{"foo1": "session_bar1"})
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunRequest("get with params")
.with_variables(
**{"foo1": "bar1", "foo2": "session_bar2", "sum_v": "${sum_two(1, 2)}"}
)
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2", "sum_v": "$sum_v"})
.with_headers(**{"User-Agent": "HttpRunner/${get_httprunner_version()}"})
.extract()
.with_jmespath("body.args.foo2", "session_foo2")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.sum_v", "3")
),
]
if __name__ == "__main__":
TestCaseValidateWithFunctions().test_start()

View File

@@ -1,58 +0,0 @@
config:
name: "request methods testcase: validate with variables"
variables:
foo1: session_bar1
base_url: "https://postman-echo.com"
verify: False
teststeps:
-
name: get with params
variables:
foo1: bar1
foo2: session_bar2
request:
method: GET
url: /get
params:
foo1: $foo1
foo2: $foo2
headers:
User-Agent: HttpRunner/3.0
extract:
session_foo2: "body.args.foo2"
validate:
- eq: ["status_code", 200]
- eq: ["body.args.foo1", "$foo1"]
- eq: ["body.args.foo2", "$foo2"]
-
name: post raw text
variables:
foo1: "hello world"
foo3: "$session_foo2"
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/3.0
Content-Type: "text/plain"
data: "This is expected to be sent back as part of response body: $foo1-$foo3."
validate:
- eq: ["status_code", 200]
- eq: ["body.data", "This is expected to be sent back as part of response body: hello world-$foo3."]
-
name: post form data
variables:
foo1: bar1
foo2: bar2
request:
method: POST
url: /post
headers:
User-Agent: HttpRunner/3.0
Content-Type: "application/x-www-form-urlencoded"
data: "foo1=$foo1&foo2=$foo2"
validate:
- eq: ["status_code", 200]
- eq: ["body.form.foo1", "$foo1"]
- eq: ["body.form.foo2", "$foo2"]

View File

@@ -1,66 +0,0 @@
# NOTE: Generated By HttpRunner v4.3.5
# FROM: request_methods/validate_with_variables.yml
from httprunner import HttpRunner, Config, Step, RunRequest
class TestCaseValidateWithVariables(HttpRunner):
config = (
Config("request methods testcase: validate with variables")
.variables(**{"foo1": "session_bar1"})
.base_url("https://postman-echo.com")
.verify(False)
)
teststeps = [
Step(
RunRequest("get with params")
.with_variables(**{"foo1": "bar1", "foo2": "session_bar2"})
.get("/get")
.with_params(**{"foo1": "$foo1", "foo2": "$foo2"})
.with_headers(**{"User-Agent": "HttpRunner/3.0"})
.extract()
.with_jmespath("body.args.foo2", "session_foo2")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.args.foo1", "$foo1")
.assert_equal("body.args.foo2", "$foo2")
),
Step(
RunRequest("post raw text")
.with_variables(**{"foo1": "hello world", "foo3": "$session_foo2"})
.post("/post")
.with_headers(
**{"User-Agent": "HttpRunner/3.0", "Content-Type": "text/plain"}
)
.with_data(
"This is expected to be sent back as part of response body: $foo1-$foo3."
)
.validate()
.assert_equal("status_code", 200)
.assert_equal(
"body.data",
"This is expected to be sent back as part of response body: hello world-$foo3.",
)
),
Step(
RunRequest("post form data")
.with_variables(**{"foo1": "bar1", "foo2": "bar2"})
.post("/post")
.with_headers(
**{
"User-Agent": "HttpRunner/3.0",
"Content-Type": "application/x-www-form-urlencoded",
}
)
.with_data("foo1=$foo1&foo2=$foo2")
.validate()
.assert_equal("status_code", 200)
.assert_equal("body.form.foo1", "$foo1")
.assert_equal("body.form.foo2", "$foo2")
),
]
if __name__ == "__main__":
TestCaseValidateWithVariables().test_start()

View File

@@ -1,6 +0,0 @@
[pytest]
addopts = -s
# https://docs.pytest.org/en/latest/how-to/output.html
junit_logging = all
junit_duration_report = total
log_cli = False

View File

@@ -1,36 +0,0 @@
import sys
from pathlib import Path
from httprunner.database.engine import DBEngine
sys.path.insert(0, str(Path(__file__).parent.parent))
from httprunner import HttpRunner, Config, Step, RunSqlRequest # noqa:E402
class TestCaseDemoSqlite(HttpRunner):
config = Config("run sqlite demo")
teststeps = [
Step(
RunSqlRequest("执行一个sqlite demo")
.fetchmany("select* from student;", 5)
.extract()
.with_jmespath("[0].name", "name")
.validate()
.assert_equal(
"[0]",
{
"id": 1,
"name": "Jack",
"fullname": {"first_name": "Jack", "last_name": "Tomson"},
},
)
.assert_equal("[0].fullname.first_name", "Jack")
)
]
def test_start(self):
eg = DBEngine(db_uri="sqlite:///../data/sqlite.db")
self.with_db_engine(eg)
super().test_start()