Table des matières : Introduction
-
- Préface
- 1. Programmation Python de l'entrée à la maîtrise
- 2. Mise en œuvre pratique de projets d'automatisation d'interface
- 3. Combat réel du projet d'automatisation Web
- 4. Mise en œuvre pratique du projet d'automatisation des applications
- 5. CV des fabricants de premier rang
- 6. Tester et développer le système DevOps
- 7. Outils de tests automatisés couramment utilisés
- 8. Test de performances du JMeter
- 9. Résumé (petite surprise à la fin)
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
2. Mise en œuvre pratique de projets d'automatisation d'interface
3. Combat réel du projet d'automatisation Web
4. Mise en œuvre pratique du projet d'automatisation des applications
5. CV des fabricants de premier rang
6. Tester et développer le système DevOps
7. Outils de tests automatisés couramment utilisés
8. Test de performances du JMeter
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.