themblem/api/scripts/api_smoke.py
2024-09-01 21:51:50 +01:00

115 lines
3.6 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import json
import argparse
import requests
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
class EmblemSmokeTest(object):
def __init__(self, server, username, password):
self.server = server
self.username = username
self.password = password
def do_test_feature_post(self):
k = '0074252612205'
url = self.server + '/api/v1/code-feature-roi/?code=' + k
r = requests.post(url, headers={
'Authorization': 'token ' + self.token,
},
files={
'file': open(os.path.join(BASE_DIR, '../api/tests/data/0074252612205-roi.jpg'), 'rb'),
},
data={
'code': '0074252612205',
},
)
assert(r.status_code == 200)
print(r)
def do_test_feature_get(self):
k = '0074252612205'
url = self.server + '/api/v1/code-feature-roi/?code=' + k
r = requests.get(url, headers={
'Authorization': 'token ' + self.token,
})
assert(r.status_code == 200)
print(r)
print("feature roi data size:", len(r.content))
def do_test_qr_verify(self, qrcode, should_pass=True, fn=None, angle=None):
url = self.server + '/api/v1/qr-verify/'
if not fn:
fn = os.path.join(BASE_DIR, '../api/tests/data/smoketest.jpg')
with open(fn, 'rb') as f:
r = requests.post(url, files={
'photo': f,
},
data={
'qrcode': qrcode,
'angle': angle,
}).json()
print(r)
if should_pass:
assert r.get("id")
assert r.get("serial_code") in qrcode
else:
assert 'id' not in r
assert 'serial_code' not in r
assert 'error' in r
def do_test_tenant_login(self):
url = self.server + '/api/v1/login/'
r = requests.post(url,
json={
'username': 't1',
'password': 'p1',
}).json()
print(r)
assert r.get("token")
def auth(self):
url = self.server + '/api/v1/login/'
r = requests.post(url, json={
'username': self.username,
'password': self.password,
})
print(r)
r = r.json()
print(r)
self.token = r['token']
def run(self):
self.do_test_tenant_login()
self.auth()
self.do_test_feature_post()
self.do_test_feature_get()
code = '0074253255108'
qrcode = f'https://themblem.com/api/mini-prog-entry/?code={code}'
self.do_test_qr_verify(qrcode)
qrcode = f'https://xy.ltd/v/{code}'
self.do_test_qr_verify(qrcode)
qrcode = f'https://xy.ltd/xxx/{code}'
self.do_test_qr_verify(qrcode, should_pass=False)
code = '1395496969703'
qrcode = f'https://themblem.com/api/mini-prog-entry/?code={code}'
fn = os.path.join(BASE_DIR, '../../dataset/smoke/rotated.jpg')
self.do_test_qr_verify(qrcode, fn=fn, angle=15)
print("all tests passed")
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument("--server", "-s", default="https://dev.themblem.com")
parser.add_argument("--username", "-u", default="fam")
parser.add_argument("--password", '-p', required=True)
return parser.parse_args()
def main():
args = parse_args()
t = EmblemSmokeTest(args.server, args.username, args.password)
t.run()
if __name__ == "__main__":
main()