commit
4fb877495f
|
@ -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 用例编写。
|
Loading…
Reference in New Issue