Acabamento de hematêmese, teste de automação de interface - dependência de interface/processamento de interface de upload (instância do projeto)


prefácio

Dois métodos comuns de processamento de dependência de interface

1. Os campos do corpo da solicitação dependem
dessa situação. A maioria dos casos está na interface atualmente testada, e os campos no corpo da solicitação de sua pré-interface devem ser usados ​​no corpo da solicitação da interface atual para continuar a usar.

Por exemplo, a interface para modificação das informações do usuário utilizará o campo nome do usuário, que é passado no corpo da requisição ao criar o usuário. Parametrizamos o corpo da requisição da interface para criação do usuário para que ela possa gerar dinamicamente o nome do usuário .

Porque muda toda vez, quando a interface para modificar as informações do usuário é executada, se ainda usarmos a parametrização da interface anterior, inevitavelmente fará com que os nomes de usuário das duas sejam diferentes, o que fará com que a interface não execute , então Para executar o processamento de dependência de interface neste tipo de interface

B1

Tratamos as dependências da interface diretamente no código da classe de teste:

if case["check_info"] == 'user_info':
	user_name = json.loads(new_data)['name']
	case_logger.info("{:-^50s}".format(f"user_name:{
      
      user_name}"))
	setattr(do_re, 'user_name', user_name)

2. Dependência do campo do corpo da resposta
O método de usar o campo do corpo da resposta na próxima interface ainda é muito comum na dependência da interface. Freqüentemente, a interface anterior é uma interface de consulta do tipo get e a obtemos do corpo da resposta da interface Take o campo correspondente e utilizá-lo no corpo da requisição da próxima interface.

B2

Tratamos as dependências da interface diretamente no código da classe de teste:

if case["check_info"] == 'get_op_svc_servicestage_domainId':
	op_svc_servicestage_domainId = res.json()['user']['domain']['id']
	case_logger.info("{:-^50s}".format(f"op_svc_servicestage_domainId:{
      
      op_svc_servicestage_domainId}"))
	setattr(do_re, 'op_svc_servicestage_domainId', op_svc_servicestage_domainId)

Lidar com a interface do tipo que precisa fazer upload de arquivos

1. Análise da interface
Aqui, faça o upload direto no front-end, capture o pacote através da ferramenta de desenvolvimento F12 do navegador Chrome, e você poderá ver a solicitação e as informações correspondentes da interface do arquivo de upload, porque é a interface do projeto da empresa, é fará algum processamento de mosaico:

B3

Observe os parâmetros da solicitação novamente:

B4

Podemos ver na solicitação que o método de solicitação é um formato de formulário multipart/form-data e observe que, embora o arquivo seja carregado, o caminho e o nome do arquivo não são exibidos nos parâmetros da solicitação e o valor fileList é "binário" , então você pode saber o conteúdo de bytes do arquivo carregado

2. Exemplo do carteiro
Pegue o carteiro como exemplo, selecione a opção form-data para o corpo, preencha fileList[] para a chave e selecione o formato como arquivo, selecione um arquivo local em valor para carregar e, em seguida, inicie uma solicitação:

B5

3. Exemplo de solicitação
Acabamos de realizar a solicitação de upload de arquivos com a ajuda de ferramentas, e o carteiro pode converter nossa solicitação em formato de código python.

As etapas específicas são as seguintes:
primeiro use o carteiro para criar os parâmetros e depurar com sucesso;
clique no código abaixo do botão Salvar;

B6

Copie o código após selecionar a linguagem como Python - Requests

B7

Cole o código copiado na ferramenta de desenvolvimento do código Pycharm ou VS e execute-o

import os
import requests

from Commons.constants import UPLOAD_DIR

url = "https://接口地址/1.0/product/style-gallery"

payload = {
    
    }
files = [
    ('fileList[]', open(os.path.join(UPLOAD_DIR, 'stylegallery.png'), 'rb'))
]
headers = {
    
    }

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text.encode('utf8'))

Até agora, o processamento da interface de upload de arquivo foi concluído e testes subsequentes ou automação de interface podem ser executados com base nisso para desenvolvimento secundário.

4. Solução 2
Se o método acima não resolver o problema, use o segundo método, basicamente não haverá problema.

Vamos dar uma olhada no conteúdo da solicitação para upload de arquivos:

B9

Em seguida, aplique o seguinte modelo ao valor dos arquivos de parâmetros de solicitação da biblioteca de solicitações:

files = {
    
    
            '${name}': ('${filename}', open( '${filepath}', 'rb'), '${Content-Type}')
        }

${name}: o valor do nome "fileList[0]"
${filename}: o valor do nome do arquivo "a.jpg"
${filepath}: o caminho do arquivo do nome do arquivo
${Content-Type}: o tipo de conteúdo O valor "image/jpeg"
substitui a variável correspondente ao template pelo valor real, resultando em:

files = {
    
    
            'fileList[0]': ('a.jpg', open(os.path.join(UPLOAD_DIR, 'a.jpg'), 'rb'), 'image/jpeg')
        }

Observação: Para confirmar se o caminho do arquivo está correto, utilizo aqui um caminho relativo e, em seguida, passo os arquivos para o método de solicitações correspondente.

A seguir está o diagrama de sistema de arquitetura de conhecimento de aprendizado de engenheiro de teste de software mais completo em 2023 que eu compilei

1. Da entrada ao domínio da programação Python

Adicione uma descrição da imagem

2. Combate real do projeto de automação da interface

Adicione uma descrição da imagem

3. Combate Real do Projeto de Automação Web

Adicione uma descrição da imagem

4. Combate real do projeto de automação de aplicativos

Adicione uma descrição da imagem

5. Currículo de fabricantes de primeira linha

Adicione uma descrição da imagem

6. Testar e desenvolver o sistema DevOps

Adicione uma descrição da imagem

7. Ferramentas de teste automatizadas comumente usadas

Adicione uma descrição da imagem

Oito, teste de desempenho do JMeter

Adicione uma descrição da imagem

9. Resumo (pequena surpresa no final)

Como você pode ver um arco-íris sem experimentar o vento e a chuva; como você pode se tornar um mestre sem se controlar. Aderir ao sonho, buscar a excelência, e o ritmo da luta nunca vai parar. Antes de cada amanhecer, há glória esperando.

A luta é como uma pedra de amolar, afiando o fio; o trabalho árduo é como a luz do sol, iluminando o caminho a seguir. Sem medo de desafios e buscando a excelência, somente nos esforçando persistentemente podemos nos superar, florescer o brilho da vida e deixar os sonhos brilharem sem fim na jornada de luta!

Na jornada da luta, não tenha medo do fracasso, pois cada queda é uma oportunidade de se levantar mais forte; não busque a perfeição, pois o crescimento se acumula através de repetidas tentativas. Contanto que você tenha coragem e persistência, você seguirá firme em direção ao seu sonho.

Acho que você gosta

Origin blog.csdn.net/m0_70102063/article/details/132300641
Recomendado
Clasificación