Em um teste recente de interface de login, os seguintes cenários foram descobertos. Desta vez, registrarei os problemas encontrados e o processo de resolução:
1. Quando a operação de login é encontrada na captura do pacote, três interfaces são solicitadas sucessivamente, e cada interface é associada
2. As informações do cookie precisam ser retidas para cada solicitação e necessárias para a próxima solicitação de interface
3. Os dados retornados por cada interface não estão no formato json, e operações adicionais são necessárias para extrair dados
Este documento começará a partir desses três pontos
1. Primeiro, olhe para a situação de captura de pacotes e análise de estrutura geral
Solicite 3 interfaces, e então iremos analisá-las uma por uma
① No geral, todos eles são solicitações get e os parâmetros comuns são service, callback e _. Existem outros parâmetros no Artigo 2 e no Artigo 3.
② Os dois campos sob os dados nos dados retornados pela primeira interface são os parâmetros da segunda interface
③ Um determinado campo nos dados retornados pela segunda interface é um parâmetro da terceira interface
Escreva uma estrutura aproximada com base no acima
#coding:utf-8
import requests,re
url = "xxxxx"
#tt就代替那个_作为参数了
def login1(service,callback,tt):
pass
#三条接口相互依赖,第2个接口参数来源第1个接口返回值
def login2():
pass
#三条接口相互依赖,第3个接口参数来源第2个接口返回值
def login3():
pass
if __name__ == '__main__':
service = 'xxxxxx'
callback = 'xxxxxxx'
tt = 'xxxxxxx'
login3(service, callback, tt)
2. Então é normal escrever o pedido get
Visto que o valor de retorno aqui não está no formato json, não há necessidade de escrever json.loads () como este, imprima-o primeiro para visualizar
3. Como mencionado acima, lt e execução aqui são os parâmetros da próxima interface, portanto, seus valores precisam ser extraídos neste momento
Isso envolve extração regular
ps: Recomendar um site de depuração http://tools.jb51.net/regex/javascript
Endereço de aprendizado de expressão regular Python: https://www.jb51.net/article/177521.htm
Também é simples escrever aqui em python, consulte os comentários no script abaixo para obter detalhes
def login1(service,callback,tt):
print("开始执行login1")
url = url1 + "/sso/login"
params = {
"service":service,
"callback":callback,
"_":tt
}
req = requests.get(url = url,params=params)
print(req.text)
#返回结果转换为字符串
response_str = str(req.text)
#正则提取字符串信息,返回列表,提取data下的信息
m = re.findall(r'{.*?}',response_str)[0]
#data下就是key-value形式,通过eval()将字符串转换为字典,然后字典中通过key提取到value值
lt = eval(m)['lt']
execution = eval(m)['execution']
return lt,execution
4. Escreva a segunda interface e traga as coisas retornadas pela primeira interface
def login2(service,callback,tt):
lt,execution = login1(service,callback,tt)
print("开始执行login2")
Um erro 302 foi encontrado durante a execução
Erro 302: redirecionamento, representando uma transferência temporária; significa que você visitou a URL a, mas por causa do interceptor no lado do servidor ou outro processamento de código, você será redirecionado para a URL b.
Ao usar solicitações para simular o login, o uso direto de request.get (url) pode facilmente causar o redirecionamento 302. O motivo é que os cookies não são persistentes (as solicitações vêm com o processamento de cookies, mas não são persistentes)
Então, aqui precisamos armazenar o cookie e usá-lo
Consulte o caminho para o uso específico de cookies: https://www.cnblogs.com/liuzhzhao/p/12114453.html
5. Saiba como usá-lo, então vamos modificar o código
O script a seguir é como uma abóbora, as informações do cookie da primeira interface são salvas para a segunda interface e o cookie da segunda interface é salvo para a terceira.
Está concluído como um todo e precisa ser complementado separadamente mais tarde.
Os principais pontos de conhecimento dessa época: chamada de dependência de interface, armazenamento e uso de cookies, extração regular de informações de chave de python
Finalmente: benefícios do testador
Na indústria de tecnologia, você deve aprimorar suas habilidades técnicas e enriquecer sua experiência prática em projetos de automação, o que será muito útil para o planejamento de sua carreira nos próximos anos e para a profundidade de sua tecnologia de testes.
Na temporada de entrevistas do Golden 9th e Silver 10th, a temporada de empregos, organizar perguntas para entrevistas se tornou meu hábito por muitos anos! A seguir está minha coleção e classificação nos últimos anos, o todo é organizado em torno de [teste de software], o conteúdo principal inclui: vídeo exclusivo de teste de automação python, detalhes de automação Python, um conjunto completo de perguntas de entrevista e outros conteúdos de conhecimento.
Não tenha vergonha de receber um salário de 8 mil, não seja complacente só porque ganha um salário de mais de 20 mil, não seja complacente só porque ganha 30-45. A vida não é ganhar aquele saláriozinho, o que você precisa é abrir uma carreira.
Que você e eu nos encontremos e você encontrará algo! Bem-vindo a seguir a conta pública do WeChat: [Artigo Sad Spicy] Receba gratuitamente um livro de entrevistas com o engenheiro de teste de software de 216 páginas. E os tutoriais de aprendizagem em vídeo correspondentes são gratuitos para compartilhar!
Boa recomendação de artigo:
Construção de ambiente de automação Appium
Depois de ler o artigo de Daniel, não terei medo da resposta lenta do servidor.