2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Zusammenfassung des Technologie-Stacks:
①Java-Grundlagen (Kapselung, Reflexion, Generika, JDBC)
②Analyse der Konfigurationsdatei (Eigenschaften)
③httpclient (http-Anfrage senden)
④Fastjson- und jsonpath-Prozessdaten
⑤Wichtige Punkte des automatisierten Test-Frameworks testng
⑥Allure-Testbericht
Datei – Einstellungen – Maven
Fastjson und jsonpath werden beide zur Datenverarbeitung verwendet.
Der Schwerpunkt des Testautomatisierungsframeworks.
Allure-Testbericht
fastjson verarbeitet JSON-Strings und JSON-Arrays
Analysieren Sie JSON-String-Eingabeparameter und bereiten Sie sie auf nachfolgende Anforderungen vor
<!-https://mvnrepository.com/artifact/com.alibaba/fastjson -->
com.alibaba
fastison
1.2.75
Nach dem Herunterladen können Sie die automatisch generierten Abhängigkeitspakete sehen.
Für die Anmeldung sind beispielsweise ein Benutzername und ein Passwort erforderlich.
{“Benutzername”:“qzcsbj”, “Passwort”:“123456”}
Datenquelle des Automatisierungsframeworks, Eingabeparameter sind alle JSON-Strings, FastJSON muss verwendet werden
Class.Method, diese Methode ist statisch
Jeder Schlüssel in der Sammlung ist String
Der jetzt definierte JSON-String wurde analysiert und in der Map platziert
Anweisungen zum Einfügen des Inhalts des JSON-Strings in die Karte
blog.csdnimg.cn/direct/ae6feeba2eae442f961df977a6c8eac1.jpeg)
Das Automatisierungsframework umfasst ein Initialisierungsframework, und einige erfordern Operationen an den darin enthaltenen Daten.Um die Datenbank zu betreiben, müssen Sie SQL schreiben
Hier ist ein JSON-Array. Jedes Element im Array ist eine JSON-Zeichenfolge, die Schlüsselwertdaten enthält. Das erste ist die SQL-Nummer, die tatsächlich ausgeführte SQL.
[{„sqlNo“: „1“, „sq!“: „Wählen Sie * aus Benutzern aus, bei denen Benutzername='qzcsbj';“},.“sqlNo“: „2“, „sql“: „Wählen Sie * aus Benutzern aus, bei denen Benutzername='test00501';“}]
Diese Methode ist nicht empfehlenswert
Übergeben Sie zwei Parameter, der erste Parameter ist die zu analysierende Zeichenfolge und der zweite Parameter ist die Bytecode-Datei.
Die Lösung ist: Analysieren Sie den ersten Parameter-String in eine Map
String sqlNo = (String)sql.get("sqlNo");
Kapseln Sie den Inhalt jeder JSON-Zeichenfolge in ein Objekt l, fügen Sie der Entitätsklasse get- und set-Methoden hinzu und erhalten Sie direkt object.get, um den Inhalt von SQL abzurufen. Diese Art von Code-Eingabeaufforderung ist auch bequemer zu schreiben. Auch die Automatisierung verweist auf diese Kapselung. Das heißt, SQL in ein Objekt zu kapseln,
Kapseln Sie die Eigenschaften als privat (sqlNo, sql), stellen Sie Get- und Set-Methoden bereit, parametrisierte Konstruktionsmethoden und Parameterlose Konstruktionsmethoden müssen hinzugefügt werden, und die Reflexion passt die Parameterlosen Konstruktionsmethoden an. Wenn Sie nur Parameter mit Parametern schreiben und keine Parameter-freien Konstruktoren schreiben, wird auf jeden Fall ein Fehler gemeldet. Um das String-Ergebnis zu drucken, müssen Sie die toString()-Methode hinzufügen, andernfalls wird die Adresse des Objekts gedruckt Die obige Entitätsklasse wurde geschrieben.
Optimieren Sie es erneut
Wenn das Element in ein Objekt gekapselt ist, wird es in eine von Ihnen selbst geschriebene Klasse geändert.class
Das ist sql.class
Die zweite Methode oben besteht darin, jedes Element in ein HashMap-Objekt zu kapseln, und hier wird jedes Element in ein SQL-Objekt gekapselt.
Rufen Sie Attribute direkt vom Objekt mit der get-Methode ab
Diese Methode ist bequemer und erfordert nicht den Erwerb vieler Schlüssel.
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>
SQL-Klasse
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_);
}
}
}
Denn derzeit ist das Projekt vom Front- und Backend getrennt.
Das Backend gibt im Allgemeinen JSON-Strings zurück
Wenn Sie Aussagen machen möchten, analysieren Sie normalerweise JSON. Nach dem Parsen machen Sie normalerweise nur Aussagen zu Schlüsselfeldern.
Behauptungen sind im Allgemeinen Code + Schlüsselgeschäftsfelder
Da es sich um eine JSON-Zeichenfolge handelt, müssen Sie jsonpath verwenden
blog.csdnimg.cn/5bdd9defd7db47b7a5934f79f9fd0ceb.png)
Es muss bestätigt werden, ob die Abhängigkeiten heruntergeladen wurden
Diese Variable hier ist das Antwortfeld, das nach erfolgreicher Anmeldung zurückgegeben wird.
blog.csdnimg.cn/a20e89ee243c43f69a1b4e1c3a97b89b.png)
Übergeben Sie die definierte Feldantwort
Schnittstellenautomatisierung zur Verarbeitung abhängiger Daten
Holen Sie sich den Token vom Anfang dieser Zeile, der ebenfalls $ ist.
Wenn es sich nach dem Erhalt um eine globale Variable handelt, kann sie in der globalen Variablen gespeichert werden.
Wenn Sie die Behauptung erhalten möchten, dann erhalten Sie sie
Machen Sie eine andere Behauptung
Im Automatisierungsframework werden Anforderungen durch Schreiben von Code gesendet. Dies bedeutet, dass Sie httpclient verwenden müssen, eine von Java bereitgestellte Bibliothek, um mit dem Server zu interagieren.
Muss einen Ausweis übergeben
Aus der Bibliothek können wir ersehen, dass die ID 259 ist
In der Datendatei sind alle Parameter zu JSON-Strings verkettet, daher wird id=259 auch zu JSON-Strings verkettet.
Setzen Sie hier 259 in doppelte Anführungszeichen, um es automatisch zu maskieren.
Anfrage abrufen: http://47.108.153.47:18089/qzcsbj/user/findById?id=259
?Parameter später direkt verbinden
Es sind auch mehrere Werte zu berücksichtigen: http://47.108.153.47:18089/qzcsbj/user/findById?id=259&name=jack
Das Obige verkettet die Parameter-URL und die Parameter zum Senden der Get-Anfrage. Nach der Erstellung müssen Sie ein Get-Request-Objekt erstellen.
Geben Sie die URL ein
Hier erhalten Sie das httpget-Anforderungsobjekt
Die abstrakte Klasse CloseableHttpClient implementiert die Schnittstelle HttpClient, Closeable
Polymorphismus kann verwendet werden, und das Unterklassenobjekt zeigt auf die Referenz der übergeordneten Klasse (die von der übergeordneten Klasse implementierte Schnittstelle).
Das Ergebnis res ist oben definiert
Im Augenblick
http://47.108.153.47:18089/qzcsbj/user/login
URL, Anforderungsparameter, Anforderungsheader
Diese Parameter werden aus Datendateien im Automatisierungsframework abgerufen.
Definieren Sie res
zurück res
URL übergeben
Wenn Sie sich den Konstruktor ansehen, können Sie String übergeben und den zweiten Konstruktor angeben.
Das Obige ist die gesendete Post-Anfrage: Der Anforderungsheader und die zu sendenden Daten sind alle definiert.
Das Unterklassenobjekt verweist auf die Referenz der übergeordneten Klasse