目录
工程解构:
pytest-xdist插件
FileLock()线程锁
此处作用是 使session只调用一次
代码
pytest.ini(这个配置文件的作用是开启多线程 )
[pytest]
addopts = -n auto
test_work.py
import re
import pytest
import requests
from filelock import FileLock
def test_create_data():
data = [("zhangjingxing" + str(x), "jingxing", "1387900%04d" % x, 0) for x in range(10)]
print("\n")
print(data)
return data
class TestWork:
# 获取token
@pytest.fixture(scope="session")
def test_token(self):
res = None
while FileLock("session.lock"):
corpid = "xxx"
corpsecret = "xxx"
res = requests.get(f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={corpsecret}")
print(res.json()['access_token'])
return res.json()['access_token']
# 获取部门列表
def test_get_department(self, test_token):
userid = 2
r = requests.get(
f"https://qyapi.weixin.qq.com/cgi-bin/department/simplelist?access_token={test_token}&id={userid}")
print(r.json())
return r.json()
# assert r.json()['errcode'] == 0
# 获取成员ID列表
def test_post_user(self, test_token):
r = requests.post(f"https://qyapi.weixin.qq.com/cgi-bin/user/list_id?access_token={test_token}")
print(r.json())
return r.json()
# 创建成员
# @pytest.mark.parametrize("userid, name, mobile, errcode", [("zhangjingxing", "jingxing", "13801100000", 0)])
def test_create_member(self, userid, name, mobile, test_token):
data = {
"userid": userid,
"name": name,
"alias": name,
"mobile": mobile,
"department": [
"6"
],
"order": [
"10"
],
"position": "产品经理",
"gender": "1",
"email": "zhangsan@gzdev.com",
"biz_mail": "",
"is_leader_in_dept": [
"1"
],
"direct_leader": [
"hal"
],
"enable": "1",
"avatar_mediaid": "",
"telephone": "020-123456",
"address": "广州市海珠区新港中路",
"main_department": "1",
"to_invite": True,
"external_position": "高级产品经理",
"external_profile": {
}
}
r = requests.post(f"https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token={test_token}&debug=1",
json=data)
print(r.json())
return r.json()
# 删除成员
def test_delete_member(self, userid, test_token):
r = requests.get(
f"https://qyapi.weixin.qq.com/cgi-bin/user/delete?access_token={test_token}&userid={userid}")
print(r.json())
return r.json()
# 更新成员
def test_update_member(self, userid, name, mobile, test_token):
data = {
"userid": userid,
"alias": name,
"mobile": mobile
}
r = requests.post(f"https://qyapi.weixin.qq.com/cgi-bin/user/update?access_token={test_token}",
json=data)
print(r.json())
return r.json()
# 创建部门
def test_create_department(self, test_token):
data = {
"name": "特斯拉",
"name_en": "tesla",
"parentid": 1,
"order": 1,
"id": 6
}
r = requests.post(f"https://qyapi.weixin.qq.com/cgi-bin/department/create?access_token={test_token}",
json=data)
print(r.json())
@pytest.mark.parametrize("userid, name, mobile, errcode", test_create_data())
def test_all(self, userid, name, mobile, errcode, test_token):
try:
assert "created" == self.test_create_member(userid, name, mobile, test_token)['errmsg']
except AssertionError as e:
if "mobile existed" in e.__str__():
print("\n11111111111111111111111111111111111111111111111111111111111111111111111111")
re_userid = re.findall(":(.*)'", e.__str__()[0])
if re_userid.endswith("'") or re_userid.endswith('"'):
re_userid = re_userid[:-1]
print(re_userid)
assert "deleted" == self.test_delete_member(userid, test_token)['errmsg']
assert "created" == self.test_create_member(userid, name, mobile, test_token)['errmsg']
assert userid == self.test_post_user(test_token)['dept_user'][-1]['userid']
assert "updated" == self.test_update_member(userid, name, mobile, test_token)["errmsg"]
assert "deleted" == self.test_delete_member(userid, test_token)["errmsg"]
assert userid != self.test_post_user(test_token)['dept_user'][-1]['userid']