Pytest+request+Allure 인터페이스 자동화 프레임 워 크 실현
인터페이스 자동 화 는 아 날로 그 프로그램 인터페이스 차원 의 자동 화 를 말 하 는데 인터페이스 가 쉽게 변경 되 지 않 고 유지 보수 비용 이 더욱 적기 때문에 각 회사 의 사랑 을 받는다.
인터페이스 자동 화 는 두 부분,기능 적 인 인터페이스 자동화 테스트 와 병렬 인터페이스 자동화 테스트 를 포함한다.
이번 글 은 첫 번 째 기능 적 인 인터페이스 자동화 프레임 워 크 를 중점적으로 소개 한다.
간단 한 소개
환경:Mac,Python 3,Pytest,Allure,Request
pytest==3.6.0
pytest-allure-adaptor==1.7.10( )
pytest-rerunfailures==5.0
configparser==3.5.0
PyYAML==3.12
requests==2.18.4
simplejson==3.16.0
----------------------------------------
2020-4-30
pytest==5.3.1
allure-pytest==2.8.6
allure-python-commons==2.8.6
⚠️ :pytest-allure-adaptor , allure-pytest;
allure-pytest , pytest-allure-adaptor
흐름:Yaml 테스트 데이터 읽 기-테스트 용례 생 성-테스트 용례 실행-Allure 보고서 생 성모듈 류 의 디자인 설명:
Request.py
패키지 request 방법,다 중 프로 토 콜 확장 지원(get\post\put)환경 별 설정,email 관련 설정 을 포함 하여 설정 파일 을 읽 습 니 다.
Config.py
패키지 기록 로그 방법 은 debug,info,warning,error,critical 로 나 뉜 다.Log.py
smtplib 패키지 방법,실행 결과 메 일 알림 보 내기Email.py
assert 패키지 방법Assert.py
핵심 코드.사례 집합 을 정의 하고 실행 하여 보고 서 를 생 성 합 니 다.Yaml 테스트 데이터 형식 은 다음 과 같 습 니 다.
---
Basic:
dec: " "
parameters:
-
url: /settings/basic.json
data: slug=da1677475c27
header: {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko)\
Chrome/67.0.3396.99 Safari/537.36",
"Content-Type": "keep-alive"
}
2.코드 구조 와 프레임 워 크 프로 세 스1.코드 구 조 는 다음 그림 참조:
코드 구조.jpg
2.프레임 워 크 프로 세 스 는 다음 그림 참조:
프레임 워 크 프로 세 스.jpg
3.상세 한 기능 과 사용 설명
1.설정 파일 config.ini 정의
이 파일 에 서 는 테스트 환경[private 구분debug]와 공식 환경[onlinerelease]는 각각 관련 설정 항목 을 정의 합 니 다.[mail]부분 은 메 일 관련 설정 항목 입 니 다.
# http
[private_debug]
# debug
tester = your name
environment = debug
versionCode = your version
host = www.jianshu.com
loginHost = /Login
loginInfo = [email protected]&password=123456
[online_release]
# release
tester = your name
environment = release
versionCode = v1.0
host = www.jianshu.com
loginHost = /Login
loginInfo = [email protected]&password=123456
[mail]
#
smtpserver = smtp.163.com
sender = [email protected]
receiver = [email protected]
username = [email protected]
password = 123456
2,Yml 테스트 데 이 터 를 읽 고 봉인Yml 테스트 데이터 예 는 첫 번 째 절 을 볼 수 있 습 니 다.하나의 인 터 페 이 스 는 여러 개의 case 데 이 터 를 정의 할 수 있 습 니 다.getparameter 는 봉 인 된 Yml 데 이 터 를 읽 는 방법 으로 반복 적 으로 읽 은 후 여러 개의 case 데 이 터 를 list 에 저장 합 니 다.
class Basic:
params = get_parameter('Basic')
url = []
data = []
header = []
for i in range(0, len(params)):
url.append(params[i]['url'])
data.append(params[i]['data'])
header.append(params[i]['header'])
3.사례 작성
class TestBasic:
@allure.feature('Home')
@allure.severity('blocker')
@allure.story('Basic')
def test_basic_01(self, action):
"""
:
"""
conf = Config()
data = Basic()
test = Assert.Assertions()
request = Request.Request(action)
host = conf.host_debug
req_url = 'http://' + host
urls = data.url
params = data.data
headers = data.header
api_url = req_url + urls[0]
response = request.get_request(api_url, params[0], headers[0])
assert test.assert_code(response['code'], 401)
assert test.assert_body(response['body'], 'error', u' .')
assert test.assert_time(response['time_consuming'], 400)
Consts.RESULT_LIST.append('True')
4.전체 프레임 워 크 run.py 실행
if __name__ == '__main__':
#
args = ['-s', '-q', '--alluredir', xml_report_path]
self_args = sys.argv[1:]
pytest.main(args)
cmd = 'allure generate %s -o %s' % (xml_report_path, html_report_path)
try:
shell.invoke(cmd)
except:
log.error(' , ')
raise
try:
mail = Email.SendMail()
mail.sendMail()
except:
log.error(' , ')
raise
5.err.log 인 스 턴 스[ERROR 2018-08-24 09:55:37]Response body != expected_msg, expected_msg is{"error":"계속 작업 하기 전에 등록 하거나 로그 인 하 십시오 9."},body is{"error":"계속 작업 하기 전에 등록 하거나 로그 인 하 십시오."}
[ERROR 2018-08-24 10:00:11]Response time > expected_time, expected_time is 400, time is 482.745
[ERROR 2018-08-25 21:49:41]statusCode error, expected_code is 208, statusCode is 200
6.Assert 부분 코드
def assert_body(self, body, body_msg, expected_msg):
"""
response body
:param body:
:param body_msg:
:param expected_msg:
:return:
"""
try:
msg = body[body_msg]
assert msg == expected_msg
return True
except:
self.log.error("Response body msg != expected_msg, expected_msg is %s, body_msg is %s" % (expected_msg, body_msg))
Consts.RESULT_LIST.append('fail')
raise
def assert_in_text(self, body, expected_msg):
"""
response body
:param body:
:param expected_msg:
:return:
"""
try:
text = json.dumps(body, ensure_ascii=False)
# print(text)
assert expected_msg in text
return True
except:
self.log.error("Response body Does not contain expected_msg, expected_msg is %s" % expected_msg)
Consts.RESULT_LIST.append('fail')
raise
7.요청 부분 코드
def post_request(self, url, data, header):
"""
Post
:param url:
:param data:
:param header:
:return:
"""
if not url.startswith('http://'):
url = '%s%s' % ('http://', url)
print(url)
try:
if data is None:
response = self.get_session.post(url=url, headers=header)
else:
response = self.get_session.post(url=url, params=data, headers=header)
except requests.RequestException as e:
print('%s%s' % ('RequestException url: ', url))
print(e)
return ()
except Exception as e:
print('%s%s' % ('Exception url: ', url))
print(e)
return ()
# time_consuming ,
time_consuming = response.elapsed.microseconds/1000
# time_total ,
time_total = response.elapsed.total_seconds()
Common.Consts.STRESS_LIST.append(time_consuming)
response_dicts = dict()
response_dicts['code'] = response.status_code
try:
response_dicts['body'] = response.json()
except Exception as e:
print(e)
response_dicts['body'] = ''
response_dicts['text'] = response.text
response_dicts['time_consuming'] = time_consuming
response_dicts['time_total'] = time_total
return response_dicts
4.Allure 보고서 및 이메일1.Allure 보고서 총람,다음 그림 참조:
Allure 보고서.jpg
2.이메일 은 다음 그림 을 보십시오.
Email.jpg
5.후속 최적화
1.Jenkins 를 통합 하고 Jenkins 플러그 인 을 사용 하여 Allure 보고 서 를 생 성 합 니 다.
2.다 중 스 레 드 병렬 인터페이스 자동화 테스트
3.인터페이스 암호 화,파라미터 암호 화
Pytest+request+Allure 의 인터페이스 자동화 프레임 워 크 실현 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Pytest 인터페이스 자동화 프레임 워 크 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pytest+request+Allure 인터페이스 자동화 프레임 워 크 실현환경 별 설정,email 관련 설정 을 포함 하여 설정 파일 을 읽 습 니 다.Config.py패키지 기록 로그 방법 은 debug,info,warning,error,critical 로 나 뉜 다.Log.pysmtp...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.