pythonによるインタフェーステストの自動化(pytest、requestsを使用)

10096 ワード

import pytest
import requests
import json
import hashlib
import random
import webbrowser

#@pytest.fixture         ,     
@pytest.fixture(scope='function')
#  test_  ,     
def a():
    #    1234567 9999999             
    rand = str(random.randrange(1234567,9999999))
    #    md5      ,     utf-8,     
    md5_1 = bytes(rand + 'XX',encoding='utf-8')
    #md5  ,        ,hexdigest    
    sign = hashlib.md5(md5_1).hexdigest()
    #  url
    url = 'url?sign='+sign+'&randomStr='+rand
    print(url)
    #      url
    webbrowser.open(url,new=0)
    #            
    return rand

#@pytest.mark.parametrize        ,@pytest.mark.parametrize(  ,  )       ,      
@pytest.mark.parametrize(('communityId','companyId','visitTime'),[('14336334','52','2020-05-18'),('14336334','78','2020-05-19')])
#a a()   
def test_b(a,communityId,companyId,visitTime):

    visitors = """[{"name": "     ", "phone": "16020002021", "idcard": "610321199208245019",
                    "idcardPic": "     url.png"}]"""
    #  
    md5_m = bytes(communityId + companyId + visitTime + visitors,encoding='utf-8')
    m = hashlib.md5(md5_m).hexdigest()
    #  url
    url = 'url'
    #  data
    data = {
     
        'communityId': communityId,
        'companyId': companyId,
        'visitTime': visitTime,
        'visitors': visitors,
        'sign': m,
        'randomStr': a,
    }
    print(data)
    #  requests    post  
    req = requests.post(url,data)
    #    
    print(req.json())
    #  ,        
    assert req.json()['status'] == 200
    assert req.json()['data']['visitors'][0]['phone'] == '16020002021'

def test_c(a):
    print(a)

#  main      
if __name__ == '__main__':
    pytest.main(['-s','./test_case'])