Merge pull request #76 from 003307/master

add http docs
This commit is contained in:
mikigo 2024-05-24 18:12:03 +08:00 committed by GitHub
commit 4fb877495f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 181 additions and 0 deletions

View File

@ -0,0 +1,181 @@
# 创建一条完整的用例
以域管服务端平台创建子管理员为例
## 封装用例步骤的方法
所有的方法都在 `api` 目录下;
方法基类 `_base_api.py::BaseAPI` 里面定义登陆接口,获取管理员登陆 WEB 平台 `cookie``token` 信息。
```python
# _base_api.py
from apps.autotest_udcp.config import config
from urllib3.exceptions import InsecureRequestWarning
import hashlib
import requests
class BaseApi():
SPUR_ADMIN = config.UDCP_USERNAME
SPUR_ADMIN_PASSWORD = config.UDCP_PASSWORD
def __init__(self, name=SPUR_ADMIN, password=SPUR_ADMIN_PASSWORD):
self.login_url = config.LOGIN_URL
self.host = self.login_url.split("/")[2]
self.server_domain = "https://" + self.host
self.login_by_api(name=name, password=password)
def login_by_api(self, name=SPUR_ADMIN, password=SPUR_ADMIN_PASSWORD):
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
login_url = f'{self.server_domain}/api/login'
password = hashlib.sha512(password.encode()).hexdigest()
data = {"username": name, "password": password}
headers = self.get_base_headers(headers={})
try:
ret = requests.post(login_url, headers=headers, json=data, verify=False)
headersp = ret.headers['set-cookie'].split(';')
self.cookie0 = headersp[0]
self.csrf_token_tmp = ret.headers['set-cookie'].split(" Path=/")
str2 = self.csrf_token_tmp[1].strip((';'))
self.csrf_token = str2.split("=")[-1]
self.cookie = self.cookie0 + ";" + "XSRF-TOKEN=" + self.csrf_token
return True
except:
return False
def get_cookie_token(self):
header = {'Cookie': self.cookie, 'X-XSRF-TOKEN': self.csrf_token}
get_headers = self.get_base_headers(header)
return get_headers
def get_base_headers(self,headers):
base_headers = {
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip,deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
"Content-Type": "application/json",
"Origin": self.server_domain,
'Host': self.host,
'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
}
if headers != {}:
for k, v in headers.items():
base_headers[k] = v
return base_headers
```
平台默认登陆账号是超级管理员及密码 `SPUR_ADMIN`、`SPUR_ADMIN_PASSWORD`;也可传入子管理账号及密码调用接口操作。
方法主文件:`admin_api.py`,接口业务层,根据业务需求封装接口业务方法。
```python
# admin_api.py
import json
import requests
import hashlib
from apps.autotest_udcp.api._base_api import BaseApi
class AdminApi(BaseApi):
"""管理员api"""
def create_admin_by_adminapi(
self,
username,
fullname,
password='1111',
roleids=[1],
department_select_tree="[{\"key\":1,\"check_status\":1}]",
admin_group_id=1,
phone=None,
email=None,
remark=None,
photo=None,
admin_group_ids=None
):
'''
创建平台子管理员
@param username: 管理员账号
@param fullname: 管理员姓名
@param password: 密码
@param roleids: list类型-关联角色id角色权限
@param department_select_tree: 数据权限,管理部门范围
@param admin_group_id: 所属管理员分组id
@param phone管理员手机号
@param email管理员邮箱
@param remark备注信息
@param photo管理员照片
@param admin_group_ids:管理权限管理员分组数组id
'''
password = hashlib.sha512(password.encode()).hexdigest()
url = f'{self.server_domain}/uim/v4/admin/admin'
headers = self.get_cookie_token()
data = {
"username": username,
"full_name": fullname,
"password": password,
"role_ids": roleids,
"phone": phone,
"photo": photo,
"email": email,
"department_select_tree": department_select_tree,
"remark": remark,
"admin_group_id": admin_group_id,
"admin_group_ids": admin_group_ids,
}
ret = requests.post(url, headers=headers, json=data, verify=False)
status = ret.status_code
content = json.loads(ret.content)
return status, content
```
## 编写用例
用例基类 `base_case.py::BaseCase`
```python
# base_case.py
from apps.autotest_my_app.my_app_assert import MyAppAssert
class BaseCase(MyAppAssert):
"""用例基类"""
```
所有的用例都在 `case` 目录下,用例文件以 `test_` 开头,用例 ID 结尾:`test_mycase_004.py`
```python
# test_mycase_004.py
from apps.autotest_udcp.case import BaseCase
from apps.autotest_udcp.server.udcp_api import UdcpApi
class TestUdcpApi(BaseCase):
def test_udcp_api_001(self):
"""【接口测试-管理员】创建管理员成功"""
# 1
# 接口请求创建管理员
# 接口请求成功
self.api = UdcpApi()
self.name = UdcpApi.generate_random_string()
self.pwd = UdcpApi.generate_random_string()
status, content = self.api.create_admin_by_adminapi(
username=self.name,
fullname=self.name,
password=self.pwd
)
self.assert_api_response(
actual_status=status,
actual_content=content,
expect_status=200,
expect_code=0,expect_msg='请求成功'
)
def teardown_method(self):
self.api.delete_admin_by_admin_api([self.name])
```
这样就完成了一个简单的 HTTP 用例编写。