2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Résumé de la pile technologique :
①Bases de Java (encapsulation, réflexion, génériques, jdbc)
②Analyse du fichier de configuration (propriétés)
③httpclient (envoyer une requête http)
④Données de processus Fastjson et jsonpath
⑤Points clés du cadre de test automatisé
⑥rapport de test d'attrait
Fichier—paramètres—maven
Fastjson et jsonpath sont tous deux utilisés pour traiter les données.
L'objectif du cadre d'automatisation des tests.
rapport de test d'attrait
fastjson traite les chaînes json et les tableaux json
Analyser les paramètres d'entrée de la chaîne JSON et préparer les requêtes ultérieures
<!-https://mvnrepository.com/artifact/com.alibaba/fastjson -->
com.alibaba
Fastison
1.2.75
Après le téléchargement, vous pouvez voir les packages de dépendances générés automatiquement.
Par exemple, la connexion nécessite un nom d'utilisateur et un mot de passe.
{« nom d'utilisateur » : « qzcsbj », « mot de passe » : « 123456 »}
Source de données du framework d'automatisation, les paramètres d'entrée sont tous des chaînes json, fastjson doit être utilisé
Class.Method, cette méthode est statique
Chaque clé de la collection est une chaîne
La chaîne json définie maintenant a été analysée et placée dans la carte
Instructions pour mettre le contenu de la chaîne json dans la carte
blog.csdnimg.cn/direct/ae6feeba2eae442f961df977a6c8eac1.jpeg)
Le cadre d'automatisation implique un cadre d'initialisation et certains nécessitent des opérations sur les données qu'il contient.Pour faire fonctionner la base de données, vous devez écrire SQL
Voici un tableau json. Dans le tableau, chaque élément est une chaîne json, qui contient des données de valeur clé. La première est le numéro SQL, le SQL réellement exécuté.
[{“sqlNo”:“1”,“sq!”:“select * from users where username='qzcsbj';”},.“sqlNo”:“2”,“sql”:“select * from users where username='test00501';”}]
Cette méthode n'est pas conseillée
Passez deux paramètres, le premier paramètre est la chaîne à analyser et le deuxième paramètre est le fichier de bytecode.
La solution est la suivante : analyser le premier paramètre String dans une carte
String sqlNo = (String)sql.get("sqlNo");
Encapsulez le contenu de chaque chaîne json dans un objet l, ajoutez les méthodes get et set à la classe d'entité et directement object.get pour obtenir le contenu du sql. Ce type d'invite de code est également plus pratique à écrire. L'automatisation fait également référence à cette encapsulation. C'est pour encapsuler SQL dans un objet,
Encapsulez les propriétés comme privées (sqlNo, sql), fournissez des méthodes get et set, des méthodes de construction paramétrées et des méthodes de construction sans paramètre doivent être ajoutées, et la réflexion ajustera les méthodes de construction sans paramètre. Si vous écrivez uniquement des paramètres avec des paramètres et n'écrivez pas de constructeurs sans paramètres, une erreur sera certainement signalée. Pour imprimer le résultat de la chaîne, vous devez ajouter la méthode toString(), sinon l'adresse de l'objet sera imprimée. la classe d'entité ci-dessus a été écrite.
Optimisez-le à nouveau
Si l'élément est encapsulé dans un objet, il est remplacé par une classe écrite par vous-même.class
C'est sql.class
La deuxième méthode ci-dessus consiste à encapsuler chaque élément dans un objet hashMap, et ici consiste à encapsuler chaque élément dans un objet SQL.
Obtenez les attributs de l'objet directement à l'aide de la méthode get
Cette méthode est plus pratique et ne nécessite pas d’obtenir beaucoup de clés.
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mavenProject</groupId>
<artifactId>mavenProject</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
</dependencies>
</project>
classe SQL
package com.zhou.demo;
public class Sql {
private String sql;
private String sqlNo;
public Sql() {
}
public Sql(String sql) {
this.sql = sql;
}
public Sql(String sql, String sqlNo) {
this.sql = sql;
this.sqlNo = sqlNo;
}
public void setSql(String sql) {
this.sql = sql;
}
public void setSqlNo(String sqlNo) {
this.sqlNo = sqlNo;
}
public String getSql() {
return sql;
}
public String getSqlNo() {
return sqlNo;
}
@Override
public String toString() {
return "sql{" +
"sql='" + sql + ''' +
", sqlNo='" + sqlNo + ''' +
'}';
}
}
package com.zhou.demo;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.Set;
//需求:将json字符串转化成map,字符串:{"username":"qzcsbj", "password":"123456"}
public class Test {
public static void main(String[] args) {
String parameters="{"username":"qzcsbj", "password":"123456"}";
//先解析为JSONObject,然后转换为map
HashMap<String, String> map = new HashMap<String, String>();
// 解析json格式字符串为JSONObject(JSONObject是Map接口的一个实现类,和HashMap平级)
JSONObject jsonObject = JSONObject.parseObject(parameters);
// 将JSO\\\ NObject转换为map,先获取keys,先将keyset获取,集合里的每一个key都是String,通过遍历的key获取value,再放到map中
Set<String> keys= jsonObject.keySet();
for (String key:keys) {
map.put(key,jsonObject.getString(key));
}
//验证,获取Map中的key
Set<String> keys2 = map.keySet();
for (String key :keys2) {
System.out.println(key+"="+map.get(key));
}
}
}
package com.zhou.demo;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.List;
//JSON数组,每个元素是json字符串
public class Test02 {
public static void main(String[] args) {
String initsql="[n" + "{"sqlNo":"1","sql":"select * from users where username='qzcsbj';"},n" +
"{"sqlNo":"2","sql":"select * from users where username='tester00501';"}n" + "n" + "]";
/* //元素解析为Map
List<HashMap> sqls = JSONObject.parseArray(initsql,HashMap.class);
for (HashMap sql:sqls) {
System.out.println(sql);
String sqlNo = (String)sql.get("sqlNo");
String sql_ = (String)sql.get("sql");
System.out.println("sqlNo-"+sqlNo+",sql_-"+sql_);
}*/
//元素封装到对象
List<Sql> sqls = JSONObject.parseArray(initsql, Sql.class);
for (Sql sql:sqls) {
String sqlNo = sql.getSqlNo();
String sql_ = sql.getSql();
System.out.println("sqlNo-"+",sql_"+sql_);
}
}
}
Car actuellement, le projet est séparé du front et du back end.
Le backend renvoie généralement des chaînes json
Si vous souhaitez faire des assertions, vous analysez généralement json. Après l'analyse, vous ne faites généralement des assertions que sur les champs clés.
Les assertions sont généralement du code + des champs métier clés
C'est une chaîne json, vous devez donc utiliser jsonpath
blog.csdnimg.cn/5bdd9defd7db47b7a5934f79f9fd0ceb.png)
Besoin de confirmer si les dépendances ont été téléchargées
Cette variable ici est le champ de réponse renvoyé après une connexion réussie.
blog.csdnimg.cn/a20e89ee243c43f69a1b4e1c3a97b89b.png)
Passer la réponse dans le champ défini
Automatisation de l'interface pour le traitement des données dépendantes
Obtenez le jeton au début de cette ligne, qui vaut également $.
Après l'avoir obtenue, s'il s'agit d'une variable globale, elle peut être enregistrée dans la variable globale.
Si vous voulez obtenir l'affirmation, puis l'obtenir
Faire une autre affirmation
Dans le framework d'automatisation, les requêtes sont envoyées en écrivant du code, ce qui signifie que vous devez utiliser httpclient, une bibliothèque fournie par Java pour interagir avec le serveur.
Besoin de transmettre une pièce d'identité
Depuis la bibliothèque, nous pouvons voir que l'identifiant est 259
Dans le fichier de données, les paramètres sont tous concaténés en chaînes json, donc id=259 est également concaténé en chaînes json.
Ici, mettez 259 entre guillemets doubles pour y échapper automatiquement.
obtenir la demande : http://47.108.153.47:18089/qzcsbj/user/findById?id=259
?Épisser directement les paramètres plus tard
Il existe également plusieurs valeurs à prendre en compte : http://47.108.153.47:18089/qzcsbj/user/findById?id=259&name=jack
Ce qui précède concatènera l'URL du paramètre et les paramètres d'envoi de la demande d'obtention. Après la création, vous devez créer un objet de demande d'obtention.
Passez l'url
Ici, vous obtenez l'objet de requête httpget
La classe abstraite CloseableHttpClient implémente l'interface HttpClient, Closeable
Le polymorphisme peut être utilisé et l'objet de sous-classe pointe vers la référence de classe parent (l'interface implémentée par la classe parent)
Le résultat res est défini ci-dessus
Tout de suite
http://47.108.153.47:18089/qzcsbj/user/login
URL, paramètres des paramètres de la requête, en-têtes de la requête
Ces paramètres sont obtenus à partir de fichiers de données dans le cadre d'automatisation.
Définir la résolution
retour res
URL de passage
Si vous regardez le constructeur, vous pouvez passer String et spécifier le deuxième constructeur.
Ce qui précède est la requête de publication envoyée : l'en-tête de la requête et les données à envoyer sont tous définis.
L'objet de sous-classe pointe vers la référence de classe parent