Tests d'interface automatisés super complets à l'échelle du réseau - génération/remplacement de données dynamiques (application pratique)


Préface

Pendant le processus d'automatisation de l'interface, comment générer des données dynamiques, comparer et remplacer les données dynamiques par des données de base de données ?

Scénarios d'application

Les paramètres de l'interface d'inscription nécessitent un numéro de téléphone mobile.Comment générer dynamiquement un numéro de téléphone mobile ?
Comment comparer le numéro de téléphone mobile généré avec les données de la base de données ?
Comment remplacer le numéro de téléphone mobile dans les données de cas d'utilisation par un numéro de téléphone mobile non enregistré ?

Idées de traitement dynamique des numéros de téléphone mobile

① Écrire une fonction pour générer un numéro de téléphone mobile aléatoire ;
② Interroger le numéro de téléphone mobile généré dans la base de données ;
③ Si le numéro de téléphone mobile existe déjà, régénérer le numéro de téléphone mobile ;
④ Si le numéro de téléphone mobile n'existe pas, remplacer le numéro de téléphone portable dans le scénario de test Numéro de téléphone.

Traitement dynamique des numéros de téléphone mobile

1. Scénario de test de l'interface d'enregistrement
Dans data/cases.xlsx, créez un nouveau classeur d'enregistrement et remplissez le scénario de test de l'interface d'enregistrement, où mobile_phone est un paramètre dynamique. S'il est codé en dur, il échouera pendant le processus d'automatisation.

2. Générez dynamiquement un numéro de téléphone mobile
. Dans le répertoire commun, créez un nouveau fichier helper.py, qui est utilisé pour écrire des fonctions auxiliaires pour implémenter des fonctions spécifiques (similaires à debugtalk.py dans HttpRunner).

Pour réaliser la génération par lots de numéros de téléphone mobile à 11 chiffres, le code est le suivant :

import random
def generate_mobile():
    """生成随机手机号"""
    phone = "1" + random.choice(["3","5","7","8","9"])
    for i in range(0,9):
        num = random.randint(1,9)
        phone += str(num)
    return phone
if __name__ == '__main__':
    print(generate_mobile())

Après exécution, le résultat est :

13889546979

Le code ci-dessus est relativement simple pour générer des lots de numéros de téléphone mobile. Si vous avez des exigences plus précises concernant le format du numéro de téléphone mobile, vous pouvez l'écrire vous-même selon vos besoins.

Requête et remplacement de la base de données

1. Méthode Replace()
Description :
La méthode replace() remplace old (ancienne chaîne) dans la chaîne par new (nouvelle chaîne)

remplacer la syntaxe :

str.replace(old, new[, max])

old – la chaîne à remplacer.
new – la nouvelle chaîne utilisée pour remplacer l’ancienne chaîne.
max – chaîne facultative, remplacée pas plus de fois au maximum

Remplacer l'exemple pratique :
La chaîne existante est la suivante :
Str = 'coco loves reading'

Maintenant, changez coco dans Str en vivi.

Str = 'coco爱读书'
print(Str.replace('coco', 'vivi'))

Le résultat est le suivant :

vivi爱读书

2. Écrire des cas d'utilisation de l'interface d'enregistrement

Le code de cas d'utilisation de l'interface d'enregistrement suivante, la plupart du code est en fait le même que le cas d'utilisation de connexion, sauf que l'opération de requête de base de données est ajoutée.

L'idée générale est la suivante :
① Lire les données du cas d'utilisation à partir d'Excel ;
② Déterminer si les données du cas d'utilisation contiennent #new_phone# ;
③ Si elles contiennent #new_phone#, générer aléatoirement un numéro de téléphone mobile ;
④ Si le téléphone mobile généré aléatoirement Le numéro de téléphone mobile existe dans la base de données, puis régénérez ;
⑤ Si le numéro de téléphone mobile généré aléatoirement n'existe pas dans la base de données, remplacez #new_phone# par ce numéro de téléphone mobile et inscrivez-vous.

import json
import unittest
from common.db_handler import DBHandler
from common.helper import generate_mobile
from common.logger_handler import logger
from common.requests_handler import RequestHandler
from common.excel_handler import ExcelHandler
from config.setting import config
from libs import ddt
from middleware.yaml_handler import yaml_data


@ddt.ddt
class TestRegister(unittest.TestCase):
    # 读取register sheet数据
    excel = ExcelHandler(config.data_path)
    data = excel.read_excel('register')
    def setUp(self):
        self.req = RequestHandler()
        self.db = DBHandler(host=yaml_data['mysql']['host'], port=yaml_data['mysql']['port'],
                            user=yaml_data['mysql']['user'], password=yaml_data['mysql']['password'],
                            database=yaml_data['mysql']['db'], charset=yaml_data['mysql']['charset'])
    def tearDown(self):
        self.req.close_session()
        self.db.close()
    @ddt.data(*data)
    def test_register(self,items):
        
        # 判断#new_phone#是否在用例数据中
        if "#new_phone#" in items['payload']:
            while True:
                # 使用自动生成手机号的函数
                mobile = generate_mobile()
                # 从数据库中查询此手机号是否存在
                query_mobile = self.db.query("select * from member where mobile_phone=%s;",args=[mobile])
                # 如果不存在,就跳出循环
                if not query_mobile:
                    break
            # 将#new_phone#替换为生成的手机号        
            items['payload'] = items['payload'].replace('#new_phone#', mobile)
        logger.info('*'*30)
        logger.info('测试第{}条测试用例:{}'.format(items['case_id'],items['case_title']))
        logger.info('测试数据是:{}'.format(items))
        # 访问注册接口,获取实际结果
        res = self.req.visit(items['method'],config.host+items['url'],
                             json=json.loads(items['payload']))
        # 断言:预期结果与实际结果对比
        try:
            self.assertEqual(res['code'],items['expected_result'])
            logger.info(res)
            result = 'PASS'
        except AssertionError as e:
            logger.error("测试用例执行失败{}".format(e))
            result = 'fail'
            raise e
        finally:
            TestRegister.excel.write_excel(config.data_path,'register',items['case_id']+1,8,res['code'])
            TestRegister.excel.write_excel(config.data_path,'register',items['case_id'] + 1,9, result)
if __name__ == '__main__':
    unittest.main()

Le résultat courant est :

{
    
    
    'code': 0,
    'msg': 'OK',
    'data': {
    
    
        'leave_amount': 240.0,
        'mobile_phone': '155********',
    }
}
Ce qui suit est le diagramme de système d'architecture de connaissances d'apprentissage d'ingénieur de tests logiciels le plus complet en 2023 que j'ai compilé.

1. Programmation Python de l'entrée à la maîtrise

Veuillez ajouter une description de l'image

2. Mise en œuvre pratique de projets d'automatisation d'interface

Veuillez ajouter une description de l'image

3. Combat réel du projet d'automatisation Web

Veuillez ajouter une description de l'image

4. Mise en œuvre pratique du projet d'automatisation des applications

Veuillez ajouter une description de l'image

5. CV des fabricants de premier rang

Veuillez ajouter une description de l'image

6. Tester et développer le système DevOps

Veuillez ajouter une description de l'image

7. Outils de tests automatisés couramment utilisés

Veuillez ajouter une description de l'image

8. Test de performances du JMeter

Veuillez ajouter une description de l'image

9. Résumé (petite surprise à la fin)

La vie est sans fin, la lutte est sans fin et chaque sueur est le carburant de la jeunesse. Avancez avec courage, dépassez-vous et poursuivez des possibilités infinies. N'abandonnez pas, tenez bon, la victoire appartient à ceux qui osent se battre pour l'obtenir. Montrez votre passion et créez de la brillance !

Le temps passe, les années changent, seule la lutte est éternelle. Avancez courageusement, ne craignez ni les difficultés ni les dangers et recherchez des possibilités infinies. Surmontez les obstacles, transformez la pression en motivation, allez de l'avant et devenez brillant. Tenez-vous en à vos rêves, brillez, travaillez dur et la récolte finira par être la vôtre !

La vie est comme une scène et la lutte est le spectacle le plus excitant. Avancez courageusement, dépassez vos limites et arrosez les fleurs de vos rêves avec votre sueur. N'ayez pas peur de l'échec, persévérez, croyez en votre propre force et créez votre propre chapitre glorieux.

Je suppose que tu aimes

Origine blog.csdn.net/m0_60054525/article/details/132232412
conseillé
Classement