smartpush 2.0.7__py3-none-any.whl → 2.0.9__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -31,7 +31,7 @@ class RequestBase:
31
31
  self.session.mount("https://", HTTPAdapter(max_retries=retry_strategy))
32
32
 
33
33
  @retry(stop=stop_after_attempt(3), wait=wait_fixed(2), after=log_attempt)
34
- def request(self, method, path, **kwargs):
34
+ def request(self, method, path,**kwargs):
35
35
  url = f"{self.host}{path}"
36
36
  print(f"{method} 请求:", url)
37
37
  # 统一处理请求参数
@@ -50,6 +50,7 @@ class RequestBase:
50
50
  response = self.session.request(method, url, **default_kwargs)
51
51
  response.raise_for_status()
52
52
  response_json = response.json()
53
+ assert response_json.get('code') == 1 if not kwargs.get('pass_assert_code') else True
53
54
  print("响应内容为:\n", json.dumps(response_json, ensure_ascii=False))
54
55
  return response_json
55
56
  except requests.exceptions.RequestException as e:
@@ -38,6 +38,12 @@ class URL:
38
38
  crowdPackageDetail = '/crowdPackage/detail', POST
39
39
  crowdPackageList = '/crowdPackage/list', POST
40
40
 
41
+ class Contacts(BaseEnum):
42
+ """
43
+ :type 联系人
44
+ """
45
+ getContactPersonList = '/contact/getContactPersonList', POST
46
+
41
47
  class Form(BaseEnum):
42
48
  """
43
49
  :type 表单操作
@@ -0,0 +1,40 @@
1
+ import json
2
+ import time
3
+
4
+ from tenacity import retry, stop_after_attempt, wait_exponential
5
+
6
+ from smartpush.base.request_base import RequestBase
7
+ from smartpush.base.url_enum import URL
8
+
9
+
10
+ class Contacts(RequestBase):
11
+
12
+ def callGetContactPersonList(self, value):
13
+ """
14
+ 查询联系人信息
15
+ :param value:
16
+ :return:
17
+ """
18
+ requestParam = {"rules": {"query": value}, "sessionId": "", "page": 1, "pageSize": 20}
19
+ result = self.request(method=URL.Contacts.getContactPersonList.method,
20
+ path=URL.Contacts.getContactPersonList.url, data=requestParam)
21
+ return result['resultData']
22
+
23
+
24
+ class AssertContacts(Contacts,):
25
+ tries=3
26
+ @retry(stop=stop_after_attempt(tries), wait=wait_exponential(multiplier=1, min=1, max=2))
27
+ def AssertEmailOrNameInContactPersonList(self, value, subscribeEmailStatus=False, subscribeSmsStatus=False):
28
+ result = self.callGetContactPersonList(value)
29
+ contactPersonDetailList = result['resultData']['contactPersonDetailList']
30
+ for contactPersonDetail in contactPersonDetailList:
31
+ contactPersonDetailEmail = contactPersonDetail['email']
32
+ contactPersonDetailName = contactPersonDetail['userName']
33
+ contactPersonDetailSubscribeEmailStatus = contactPersonDetail['subscribeEmailStatus']
34
+ contactPersonDetailSubscribeSmsStatus = contactPersonDetail['subscribeSmsStatus']
35
+ # 断言内容
36
+ assert contactPersonDetailEmail == value or contactPersonDetailName == value
37
+ assert contactPersonDetailSubscribeEmailStatus == subscribeEmailStatus
38
+ assert contactPersonDetailSubscribeSmsStatus == subscribeSmsStatus
39
+
40
+
smartpush/crowd/crowd.py CHANGED
@@ -1,9 +1,12 @@
1
1
  import json
2
2
  import time
3
3
 
4
+ from tenacity import retry, stop_after_attempt, wait_fixed
5
+
4
6
  from smartpush.base.request_base import CrowdRequestBase, RequestBase
5
7
  from smartpush.base.url_enum import URL
6
8
  from smartpush.export.basic.ExcelExportChecker import compare_dicts
9
+ from smartpush.export.basic.GetOssUrl import log_attempt
7
10
  from smartpush.utils import ListDictUtils
8
11
 
9
12
 
@@ -93,6 +96,22 @@ class CrowdList(RequestBase):
93
96
  resultData = result['resultData']
94
97
  return resultData
95
98
 
99
+ class AssertCrowd(Crowd):
100
+ def __init__(self,try_number = 3):
101
+ super(AssertCrowd, self).__init__()
102
+ self.try_number = try_number
103
+ def getTryNumber(self):
104
+ return self.try_number
105
+
106
+ @retry(stop=stop_after_attempt(getTryNumber()), wait=wait_fixed(3), after=log_attempt)
107
+ def assert_filter_value_in_person_package(self, page=1, pageSize=20, filter_type=None, operator='eq', filter_value=None):
108
+ try:
109
+ crowd_persons = super.callCrowdPersonListInPackage(page=page, pageSize=pageSize, filter_type=filter_type, operator=operator, filter_value=filter_value)
110
+ assert crowd_persons['num'] >=1
111
+ assert crowd_persons['responseResult'][0][filter_type] == filter_value
112
+ except:
113
+ raise
114
+
96
115
 
97
116
  if __name__ == '__main__':
98
117
  host = "https://test.smartpushedm.com/bff/api-em-ec2"
@@ -5,9 +5,9 @@ from smartpush.base.url_enum import URL
5
5
 
6
6
 
7
7
  class OpenApi(OpenApiRequestBase):
8
- def __init__(self, event_id=None, *args, **kwargs):
8
+ def __init__(self, host, headers, event_id=None, **kwargs):
9
9
  """初始化OpenApi,支持传入event_id"""
10
- super().__init__(*args, **kwargs) # 调用父类初始化
10
+ super().__init__(event_id, host, headers, **kwargs)
11
11
  self.event_id = event_id # 初始化event_id属性
12
12
  self.attrTypeList = ('STRING', 'BIGINT', 'BOOLEAN', 'DATE', 'DECIMAL')
13
13
 
@@ -37,8 +37,8 @@ class OpenApi(OpenApiRequestBase):
37
37
  if code:
38
38
  requestParam["code"] = code
39
39
  result = self.request(
40
- URL.OpenApi.getEventMetaList.url,
41
- URL.OpenApi.getEventMetaList.method,
40
+ path=URL.OpenApi.getEventMetaList.url,
41
+ method=URL.OpenApi.getEventMetaList.method,
42
42
  data=requestParam
43
43
  )
44
44
  return result
@@ -53,8 +53,8 @@ class OpenApi(OpenApiRequestBase):
53
53
  raise ValueError("event_id未初始化,请在实例化时传入")
54
54
  requestParam = {"id": self.event_id, "eventCode": eventCode}
55
55
  result = self.request(
56
- URL.OpenApi.getEventMetaById.url,
57
- URL.OpenApi.getEventMetaById.method,
56
+ path=URL.OpenApi.getEventMetaById.url,
57
+ method=URL.OpenApi.getEventMetaById.method,
58
58
  data=requestParam
59
59
  )
60
60
  return result
@@ -69,8 +69,8 @@ class OpenApi(OpenApiRequestBase):
69
69
  raise ValueError("event_id未初始化,请在实例化时传入")
70
70
  requestParam = {"id": self.event_id, "eventCode": eventCode}
71
71
  result = self.request(
72
- URL.OpenApi.delEventMetaById.url,
73
- URL.OpenApi.delEventMetaById.method,
72
+ path=URL.OpenApi.delEventMetaById.url,
73
+ method=URL.OpenApi.delEventMetaById.method,
74
74
  data=requestParam
75
75
  )
76
76
  return result
@@ -97,8 +97,8 @@ class OpenApi(OpenApiRequestBase):
97
97
  }
98
98
  }
99
99
  result = self.request(
100
- URL.OpenApi.editEventMeta.url,
101
- URL.OpenApi.editEventMeta.method,
100
+ path=URL.OpenApi.editEventMeta.url,
101
+ method=URL.OpenApi.editEventMeta.method,
102
102
  data=requestParam
103
103
  )
104
104
  return result
@@ -106,15 +106,17 @@ class OpenApi(OpenApiRequestBase):
106
106
  def getEventChannel(self):
107
107
  # requestParam = {"id": self.event_id, "eventCode": eventCode}
108
108
  result = self.request(
109
- URL.OpenApi.getEventChannel.url,
110
- URL.OpenApi.getEventChannel.method,
109
+ path=URL.OpenApi.getEventChannel.url,
110
+ method=URL.OpenApi.getEventChannel.method,
111
111
  )
112
112
  return result
113
113
 
114
- def getEventAttr(self):
114
+ def getEventAttr(self, pageSize=200, pageNumber=1):
115
+ requestParam = {"pageSize": pageSize, "pageNum": pageNumber}
115
116
  result = self.request(
116
- URL.OpenApi.getEventAttr.url,
117
- URL.OpenApi.getEventAttr.method,
117
+ path=URL.OpenApi.getEventAttr.url,
118
+ method=URL.OpenApi.getEventAttr.method,
119
+ data=requestParam
118
120
  )
119
121
  return result
120
122
 
@@ -157,3 +159,27 @@ class AssertOpenApi(OpenApi):
157
159
  if is_delete and event_id:
158
160
  self.event_id = event_id
159
161
  self.deleteEventMetaById(code)
162
+
163
+ def assert_event_attr_create_success(self, attr_code):
164
+ """
165
+ 断言事件字段添加成功,并返回attr的id
166
+ :param attr_code:
167
+ :return:
168
+ :rtype: tuple[bool, Any]
169
+ """
170
+ datas = self.getEventAttr().get('resultData', {}).get('datas', []).get('eventAttrs', [])
171
+ for data in datas:
172
+ if data.get('attrCode') == attr_code:
173
+ return True,data.get("attrMetaTabi")
174
+ assert False, f'{attr_code} 新增失败'
175
+
176
+
177
+ if __name__ == '__main__':
178
+ head = {'Content-Type': 'application/json',
179
+ 'cookie': 'osudb_appid=SMARTPUSH;osudb_oar=#01#SID0000142BLW1n/EjSTsnwj+GuvYaBsRpZKHfrkfcwypZmDI/ehcXOLaz0i6efc9ot2EmTuPrdEdroZb2nq2KcvcvhQsv7AWwcNMOQ2odLp2dSQFxS7HFcanEI1t8t1sDag3Btf/unj8TzEV+7QkfaB97O+8m;osudb_subappid=1;osudb_uid=4213785247;ecom_http_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NjcxNTM2NTYsImp0aSI6IjUxODM2Y2Q1LTliYmEtNDdkMS1hN2ZkLTRkYWFjMmZlMjdmNSIsInVzZXJJbmZvIjp7ImlkIjowLCJ1c2VySWQiOiI0MjEzNzg1MjQ3IiwidXNlcm5hbWUiOiIiLCJlbWFpbCI6ImZlbGl4LnNoYW9Ac2hvcGxpbmVhcHAuY29tIiwidXNlclJvbGUiOiJvd25lciIsInBsYXRmb3JtVHlwZSI6Nywic3ViUGxhdGZvcm0iOjEsInBob25lIjoiIiwibGFuZ3VhZ2UiOiJ6aC1oYW5zLWNuIiwiYXV0aFR5cGUiOiIiLCJhdHRyaWJ1dGVzIjp7ImNvdW50cnlDb2RlIjoiQ04iLCJjdXJyZW5jeSI6IkpQWSIsImN1cnJlbmN5U3ltYm9sIjoiSlDCpSIsImRvbWFpbiI6InNtYXJ0cHVzaDQubXlzaG9wbGluZXN0Zy5jb20iLCJsYW5ndWFnZSI6ImVuIiwibWVyY2hhbnRFbWFpbCI6ImZlbGl4LnNoYW9Ac2hvcGxpbmUuY29tIiwibWVyY2hhbnROYW1lIjoiU21hcnRQdXNoNF9lYzJf6Ieq5Yqo5YyW5bqX6ZO6IiwicGhvbmUiOiIiLCJzY29wZUNoYW5nZWQiOmZhbHNlLCJzdGFmZkxhbmd1YWdlIjoiemgtaGFucy1jbiIsInN0YXR1cyI6MCwidGltZXpvbmUiOiJBc2lhL01hY2FvIn0sInN0b3JlSWQiOiIxNjQ0Mzk1OTIwNDQ0IiwiaGFuZGxlIjoic21hcnRwdXNoNCIsImVudiI6IkNOIiwic3RlIjoiIiwidmVyaWZ5IjoiIiwiaXNGaXJzdEJpbmQiOmZhbHNlfSwibG9naW5UaW1lIjoxNzY0NTYxNjU2NzA1LCJzY29wZSI6WyJlbWFpbC1tYXJrZXQiLCJjb29raWUiLCJzbC1lY29tLWVtYWlsLW1hcmtldC1uZXctdGVzdCIsImVtYWlsLW1hcmtldC1uZXctZGV2LWZzIiwiYXBpLXVjLWVjMiIsImFwaS1zdS1lYzIiLCJhcGktZW0tZWMyIiwiZmxvdy1wbHVnaW4iLCJhcGktc3AtbWFya2V0LWVjMiJdLCJjbGllbnRfaWQiOiJlbWFpbC1tYXJrZXQifQ.bgfuaOJqX2BXDmOorrWrE6iiQswpqYO0bW78pwbP4Wk;',
180
+ 'authorization': 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NjcxNTM2NTYsImp0aSI6IjUxODM2Y2Q1LTliYmEtNDdkMS1hN2ZkLTRkYWFjMmZlMjdmNSIsInVzZXJJbmZvIjp7ImlkIjowLCJ1c2VySWQiOiI0MjEzNzg1MjQ3IiwidXNlcm5hbWUiOiIiLCJlbWFpbCI6ImZlbGl4LnNoYW9Ac2hvcGxpbmVhcHAuY29tIiwidXNlclJvbGUiOiJvd25lciIsInBsYXRmb3JtVHlwZSI6Nywic3ViUGxhdGZvcm0iOjEsInBob25lIjoiIiwibGFuZ3VhZ2UiOiJ6aC1oYW5zLWNuIiwiYXV0aFR5cGUiOiIiLCJhdHRyaWJ1dGVzIjp7ImNvdW50cnlDb2RlIjoiQ04iLCJjdXJyZW5jeSI6IkpQWSIsImN1cnJlbmN5U3ltYm9sIjoiSlDCpSIsImRvbWFpbiI6InNtYXJ0cHVzaDQubXlzaG9wbGluZXN0Zy5jb20iLCJsYW5ndWFnZSI6ImVuIiwibWVyY2hhbnRFbWFpbCI6ImZlbGl4LnNoYW9Ac2hvcGxpbmUuY29tIiwibWVyY2hhbnROYW1lIjoiU21hcnRQdXNoNF9lYzJf6Ieq5Yqo5YyW5bqX6ZO6IiwicGhvbmUiOiIiLCJzY29wZUNoYW5nZWQiOmZhbHNlLCJzdGFmZkxhbmd1YWdlIjoiemgtaGFucy1jbiIsInN0YXR1cyI6MCwidGltZXpvbmUiOiJBc2lhL01hY2FvIn0sInN0b3JlSWQiOiIxNjQ0Mzk1OTIwNDQ0IiwiaGFuZGxlIjoic21hcnRwdXNoNCIsImVudiI6IkNOIiwic3RlIjoiIiwidmVyaWZ5IjoiIiwiaXNGaXJzdEJpbmQiOmZhbHNlfSwibG9naW5UaW1lIjoxNzY0NTYxNjU2NzA1LCJzY29wZSI6WyJlbWFpbC1tYXJrZXQiLCJjb29raWUiLCJzbC1lY29tLWVtYWlsLW1hcmtldC1uZXctdGVzdCIsImVtYWlsLW1hcmtldC1uZXctZGV2LWZzIiwiYXBpLXVjLWVjMiIsImFwaS1zdS1lYzIiLCJhcGktZW0tZWMyIiwiZmxvdy1wbHVnaW4iLCJhcGktc3AtbWFya2V0LWVjMiJdLCJjbGllbnRfaWQiOiJlbWFpbC1tYXJrZXQifQ.bgfuaOJqX2BXDmOorrWrE6iiQswpqYO0bW78pwbP4Wk'}
181
+ openapi = OpenApi(headers=head, host='https://test.smartpushedm.com/bff/api-sp-market-ec2')
182
+ # openapi.getEventMetaList(channel= 'Smartpush_API')
183
+ assertopenapi = AssertOpenApi(headers=head, host='https://test.smartpushedm.com/bff/api-sp-market-ec2')
184
+ print(assertopenapi.assert_event_attr_create_success('cus_autotest_int'))
185
+ # assert False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: smartpush
3
- Version: 2.0.7
3
+ Version: 2.0.9
4
4
  Summary: 用于smartpush自动化测试工具包
5
5
  Author: lulu、felix、long
6
6
 
@@ -1,14 +1,15 @@
1
1
  smartpush/__init__.py,sha256=XJrl1vhGATHSeSVqKmPXxYqxyseriUpvY5tLIXir3EE,24
2
2
  smartpush/get_jira_info.py,sha256=s3hPwC6KePS5BtqNS9o15eCh7Nx2gn16bn6tfYK0iQI,18112
3
- smartpush/test.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
3
  smartpush/account/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
4
  smartpush/account/operate_account.py,sha256=nzJLLAEwNElavZeWVqnA_MSGTBzQrSrknmezYBwtvWs,1525
6
5
  smartpush/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
6
  smartpush/base/faker_data.py,sha256=-OcFFQnDGpjZR3guo_tHfxV7zQEHo9ciidWGqKv_jNs,25437
8
- smartpush/base/request_base.py,sha256=hP5uhCwOMlCgwKjyh1PhJ5fCmWY-8LowZdW97r5cm_0,2938
9
- smartpush/base/url_enum.py,sha256=OuEd3EqlLvKiYesU2gISPLh9wH2nNYZ-5nzBu_6Zxnw,2748
7
+ smartpush/base/request_base.py,sha256=uVb1Na-D8K8qBP69sQhiAYvFG3uKMuXQ5PJwnr9-u5k,3035
8
+ smartpush/base/url_enum.py,sha256=47XCczKEvTcO6Ap4VbEfV7K_S0t2xu3O434sHqwycE4,2896
9
+ smartpush/contacts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ smartpush/contacts/contacts.py,sha256=JssmzyHmFF6TeIKpFH6VvGC5abBXOzkSwZrAWA8v8a8,1718
10
11
  smartpush/crowd/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- smartpush/crowd/crowd.py,sha256=KNwvX-BnBnMVVuHM79a-VeBMp_guB-Kqw3tFaAPiAp8,9768
12
+ smartpush/crowd/crowd.py,sha256=ipk2wjPdYlw4xCJw-MPhXuhCJJE1ammiqptlEil6EXU,10647
12
13
  smartpush/email/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
14
  smartpush/email/activity.py,sha256=rQ62GIfg0Yh0fFkwiaRIVATBn5vY1wZzbLEJLwHmx1E,10016
14
15
  smartpush/email/schema.py,sha256=mysik-N6cry4HuSxzMMhQFsnnu5_UJ_oqVPTGY1RUkQ,31471
@@ -28,7 +29,7 @@ smartpush/form/form_assert.py,sha256=wPIRfQHhr7lN1fFd-mp0z_qKMtF4jfrNxRWvp2xfqCg
28
29
  smartpush/form/form_before.py,sha256=CCvAC_2yWPlnQGtjEA8LPLy9853Nq3nNjcL2GewFWIs,175
29
30
  smartpush/form/form_client_operation.py,sha256=gg-5uHXCyMa_ypBSYPYFVxXdwZdYBJsNtUCqayknMBw,303
30
31
  smartpush/openapi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- smartpush/openapi/openapi.py,sha256=SFZ4HHjHgEQ5HVZu6-r_97C_dhRe6M8McrgaqGjEG5g,5558
32
+ smartpush/openapi/openapi.py,sha256=8qCTvflRQBI-z1jc2hN8ISah_x9ceTf6HbfkTxSEFsc,9548
32
33
  smartpush/utils/DataTypeUtils.py,sha256=BC7ioztO3vAfKd1EOoNvXdVuXYY8qjNskV1DP7LhW-M,1082
33
34
  smartpush/utils/EmailUtlis.py,sha256=DAHd73bJ8hiJCLEXtD0xcwxPD7SOPSmBB7Jvlf6gN6s,11201
34
35
  smartpush/utils/ListDictUtils.py,sha256=Xc8kfSOZjX_k026Au4cfvtgFh5WoHxw4yRJWASyA_Cc,5041
@@ -36,7 +37,7 @@ smartpush/utils/StringUtils.py,sha256=n8mo9k0JQN63MReImgv-66JxmmymOGknR8pH2fkQrA
36
37
  smartpush/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
38
  smartpush/utils/date_utils.py,sha256=Xgx2DbmWYri71xXBiaKYTZDeh2a8MFhYns_xB0U2JOA,13159
38
39
  smartpush/utils/form_utils.py,sha256=ld-g_Dm_ZlnagQt7imYfUc87bcBRVlTctywuLtzmjXQ,849
39
- smartpush-2.0.7.dist-info/METADATA,sha256=O5ZwtC49PI2pCh1dafsPRTGR13CSgWKGlJHMnmQdL5Y,131
40
- smartpush-2.0.7.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
41
- smartpush-2.0.7.dist-info/top_level.txt,sha256=5_CXqu08EfbPaKLjuSAOAqCmGU6shiatwDU_ViBGCmg,10
42
- smartpush-2.0.7.dist-info/RECORD,,
40
+ smartpush-2.0.9.dist-info/METADATA,sha256=DahI0da_ym32xbQYta6LEthfU9d28O_MV-iErogXzBI,131
41
+ smartpush-2.0.9.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
42
+ smartpush-2.0.9.dist-info/top_level.txt,sha256=5_CXqu08EfbPaKLjuSAOAqCmGU6shiatwDU_ViBGCmg,10
43
+ smartpush-2.0.9.dist-info/RECORD,,
File without changes