selenium database testing using webdriver
지난 Selenium 튜토리얼에서 우리는 셀레늄 스크립트에서 반복되는 몇 가지 문제 해결 . 마우스 및 키보드 이벤트를 처리하고 목록을 구현하여 여러 링크에 액세스하는 몇 가지 고급 개념에 대해 논의했습니다.
우리와 함께 전진 Selenium 교육 시리즈의 고급 주제 , 우리는 당신에게 개념을 소개합니다 Selenium WebDriver를 사용한 데이터베이스 테스트.
우리는 데이터베이스 연결, 쿼리 실행, 데이터 가져 오기 및 데이터베이스 인스턴스 연결 해제 등과 같은 기본 프로세스에 대해 논의 할 것입니다. 또한 자동화 테스트를 통해 데이터베이스 테스트가 필요한 경우 다양한 실제 의미에 대해 논의 할 것입니다. 완전한 엔드 투 엔드 시나리오.
자동화 된 데이터베이스 테스트와 관련된 기술적 의미를 진행하기 전에. 자동화 테스트와 함께 데이터베이스 테스트를 수행해야하는 몇 가지 시나리오에 대해 논의하겠습니다. 그러나 그 전에 데이터베이스 테스트는 매우 독특한 유형의 테스트 인 반면 Selenium WebDriver는 애플리케이션 UI와의 사용자 상호 작용을 시뮬레이션하고 자동화하는 데 사용되는 도구라는 점을 확인하고 싶습니다.
따라서 기술적으로 말하면 데이터베이스 테스트를 정확하게 수행하는 것이 아니라 변경 사항이 양쪽 끝에 반영되어 결함을 조기에 식별 할 수 있도록 데이터베이스와 함께 애플리케이션을 테스트하는 것입니다.
물론 모든 웹 애플리케이션에는 데이터를 저장하기위한 백엔드가 필요합니다. MySQL, Oracle 및 SQL Server와 같은 데이터베이스는 요즘 상당히 인기가 있습니다.
이제 원래 주제로 돌아가서 자동화 테스트와 함께 데이터베이스 테스트의 수요를 예시하는 몇 가지 시나리오를 논의하겠습니다.
학습 내용 :
다음 시나리오를 고려하십시오.
#1) 때로는 UI에서 입력 한 데이터가 데이터베이스에 일관되게 반영되도록해야합니다. 따라서 데이터베이스에서 정보를 검색하고 검색된 정보를 UI에서 제공된 정보와 비교하여 확인합니다. 예를 들어, 등록 양식, 사용자 데이터, 사용자 프로필, 사용자 데이터 업데이트 및 삭제. 따라서 자동화 할 테스트 시나리오는 '사용자가 응용 프로그램에 등록하자마자 사용자 정보가 데이터베이스에 성공적으로 저장되었는지 확인하려면'일 수 있습니다.
#두) Selenium WebDriver로 데이터베이스 테스트를 수행하는 또 다른 사용 사례는 사용자가 데이터베이스에서 테스트 데이터 또는 예상 데이터를로드하도록 지시 할 때 발생할 수 있습니다. 따라서 이러한 경우 사용자는 타사 API를 사용하여 데이터베이스에 연결하고 쿼리를 실행하여 데이터 세트에서 데이터를 검색 한 다음 데이터베이스에서 가져온 데이터를 애플리케이션 UI에 채워진 실제 데이터로 어설 션합니다. .
#삼) 또 다른 사용 사례는 연관 데이터베이스 테스트를 수행하는 것입니다. 응용 프로그램의 UI에서 작업을 수행하고 데이터베이스에서 반영을 테스트한다고 가정합니다. 연결로 인해 영향을받는 데이터가 데이터베이스의 다양한 테이블에 상주하는 경우 일 수 있습니다. 따라서 영향을받는 모든 영역에서 데이터 반영을 테스트하는 것이 항상 권장됩니다.
내가 말했듯이 Selenium은 테스트중인 애플리케이션과의 사용자 상호 작용을 시뮬레이션합니다. 키보드 이벤트, 마우스 동작 등을 시뮬레이션 할 수 있습니다. 그러나 사용자가 브라우저 근처의 웹 애플리케이션 상호 작용을 자동화하려는 경우 셀레늄은 그다지 도움이되지 않습니다. 따라서 엔드 투 엔드 테스트를 수행하려면 다른 도구 나 기능이 필요합니다.
따라서 위의 모든 시나리오에서 UI 자동화와 함께 데이터베이스 테스트를 수행해야 할 수 있습니다. 데이터를 조작하고 반영을 확인하여 비즈니스 로직을 확인할 수 있습니다. 소프트 삭제, 필드 유효성 검사 등과 같은 데이터베이스 자체의 기술적 측면도 확인할 수 있습니다.
이제 실제 구현을 진행하겠습니다. 데이터 소스에서 데이터를 추출하기위한 Selenium WebDriver 스크립트를 개발하기 전에 데이터베이스에 테스트 데이터를 작성해 보겠습니다. 이 자습서에서는 MySQL을 데이터베이스로 사용합니다.
데이터베이스에 테스트 데이터 생성
아직 데이터베이스를 다운로드하지 않은 경우 링크 . 사용자는 몇 가지 기본 단계에 따라 데이터베이스를 다운로드하고 설치해야합니다.
= >>이 자습서 읽기 MySQL 데이터베이스 다운로드 및 설치 .
데이터베이스가 성공적으로 설치되면 사용자는 다음 스크린 샷과 같은 MySQL 명령 줄 프롬프트를 시작할 수 있습니다. 애플리케이션은 사용자에게 비밀번호를 입력하도록 요청할 수 있습니다. 기본 암호는 'root'입니다.
노트 : 사용자는 인터넷을 통해 GUI 기반 클라이언트를 찾아 데이터베이스에 연결할 수도 있습니다. 몇 가지 예를 들어, 사용자는 Query Browser 또는 Work Bench를 다운로드하여 설치할 수 있습니다.
새로운 데이터베이스 생성
다음 단계는 데이터베이스와 연결하고 쿼리를 실행하기 위해 해당 테이블에 저장된 몇 개의 테이블과 레코드로 테스트 데이터베이스를 만드는 것입니다.
1 단계) 이미 사용 가능한 모든 데이터베이스를 보려면 'show database'를 입력하십시오.
데이터베이스 표시;
2 단계) '데이터베이스 사용자 만들기'를 입력합니다. 'user'라는 데이터베이스를 만듭니다.
데이터베이스 사용자 생성;
사용자로서의 데이터베이스 이름이 생성되고 데이터베이스 목록에서 볼 수 있습니다.
3 단계) '사용자 사용'을 입력합니다. 새로 생성 된 데이터베이스를 선택합니다. 또한 'show tables;'를 입력합니다. 사용자 데이터베이스에서 사용 가능한 모든 테이블을 봅니다.
사용자 사용;
테이블 표시;
'show tables'의 결과에 Empty set이 표시됩니다. 사용자 데이터베이스 내에 사용 가능한 테이블이 없기 때문에 쿼리.
이제 몇 개의 테이블을 만들고 그 안에 레코드를 추가하겠습니다.
4 단계) 다음 명령을 입력하여 4 개의 필드 / 열 (userId, userName, userAge, userAddress)이있는 테이블을 만듭니다.
사용자 정보 테이블 생성
(
userId int,
userName varchar (255),
userAge int,
userAddress varchar (255)
);
PC 검사 및 복구 도구 Windows 10
다음 단계는 'userinfo'테이블에 데이터 레코드를 추가하는 것입니다.
5 단계) 다음 명령을 입력하여 네 개의 필드 4 개 필드 / 열 (userId, userName, userAge, userAddress) 모두에 대한 테이블에 데이터를 삽입합니다.
userinfo (userID, userName, userAge, userAddress) 값 (‘1’,‘shruti’,’25’,‘Noida’)에 삽입합니다.
추가 된 데이터를 보려면 다음 명령을 입력하십시오.
사용자 정보에서 *를 선택하십시오.
마찬가지로 테이블에 더 많은 데이터를 추가하고 다른 테이블도 만들 수 있습니다.
이제 데이터베이스를 만들었습니다. 우리는 앞으로 나아가고 이해할 수 있습니다. 데이터베이스에서 레코드를 가져 오기위한 자동화 된 쿼리 구현.
앞서 반복했듯이 Selenium WebDriver는 UI 자동화를위한 도구입니다. 따라서 Selenium WebDriver만으로는 데이터베이스 테스트를 수행 할 수 없지만 JDBC (Java Database Connectivity API)를 사용하여 수행 할 수 있습니다. API를 사용하면 사용자가 데이터 소스에 연결 및 상호 작용하고 자동화 된 쿼리를 사용하여 데이터를 가져올 수 있습니다. JDBC API를 이용하려면 시스템에서 JVM (Java Virtual Machine)을 실행해야합니다.
JDBC 워크 플로우
우리는 다음 프로세스에 초점을 맞출 것입니다.
- 데이터베이스와의 연결 생성
- 데이터 추출 / 가져 오기를위한 쿼리 실행 및 문 업데이트 (CRUD 작업)
- 데이터베이스에서 추출 된 데이터를 결과 집합 형식으로 사용하고 조작합니다. (결과 집합은 행과 열로 구성된 데이터 모음입니다.)
- 데이터베이스 연결을 끊습니다.
앞서 말했듯이 Selenium WebDriver 테스트 스크립트에서 데이터베이스를 자동으로 테스트 할 수 있으려면 테스트 스크립트 내에서 JDBC 연결을 통해 데이터베이스에 연결합니다. 연결에 게시하면 데이터베이스에서 많은 CRUD (만들기, 읽기, 업데이트 및 삭제) 작업을 트리거 할 수 있습니다.
이 자습서에서는 '읽기 작업 및 그 변형'과 Selenium WebDriver 스크립트의 구현에 대해 설명합니다. 그러나 그 전에“MySQL 명령 줄”을 사용하여 테스트 시나리오를 수동으로 확인하겠습니다.
대본:
1) 데이터베이스 서버를 열고 '사용자'데이터베이스에 연결합니다.
두) 'userinfo'테이블의 모든 레코드를 나열합니다.
통사론: 사용자 정보에서 *를 선택하십시오.
삼) 데이터베이스 연결을 닫습니다.
읽기 쿼리는 userinfo 테이블에있는 모든 사용자 데이터를 나열합니다. 테이블은 다음 열로 구성됩니다.
- userId
- 사용자 이름
- userAge
- userAddress
결과는 또한 테이블 내에 단일 데이터 세트 만 있음을 보여줍니다.
이제 Java 클래스를 사용하여 동일한 시나리오를 실행 해 보겠습니다.
데이터베이스에 액세스 할 수 있도록 사용자는 데이터베이스에 연결할 수있는 다양한 커넥터 옵션 중에서 선택할 수 있습니다. 대부분의 데이터베이스 커넥터는 'jar'파일로 무료로 배포됩니다. MySQL을 데이터 소스로 사용하고 있으므로 MySQL에 특정한 jar 파일을 다운로드해야합니다.
jar 파일은 다음 위치에서 다운로드 할 수 있습니다. 여기 또는 여기.
1 단계 : 첫 번째 단계는 프로젝트의 빌드 경로를 설정하고“mysql-connector-java-3.1.13-bin.jar”파일을 외부 라이브러리로 추가하는 것입니다.
2 단계 : 'DatabaseTesingDemo'라는 이름의 Java 클래스를 만듭니다.
3 단계 : 위 단계에서 생성 한 클래스에 아래 코드를 복사하여 붙여 넣습니다.
코드 샘플
import org.junit.After; import org.junit.Before; import org.junit.Test; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class DatabaseTesingDemo { // Connection object static Connection con = null; // Statement object private static Statement stmt; // Constant for Database URL public static String DB_URL = 'jdbc:mysql://localhost:3306/user'; // Constant for Database Username public static String DB_USER = 'root'; // Constant for Database Password public static String DB_PASSWORD = 'root'; @Before public void setUp() throws Exception { try{ // Make the database connection String dbClass = 'com.mysql.jdbc.Driver'; Class.forName(dbClass).newInstance(); // Get connection to DB Connection con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); // Statement object to send the SQL statement to the Database stmt = con.createStatement(); } catch (Exception e) { e.printStackTrace(); } } @Test public void test() { try{ String query = 'select * from userinfo'; // Get the contents of userinfo table from DB ResultSet res = stmt.executeQuery(query); // Print the result untill all the records are printed // res.next() returns true if there is any next record else returns false while (res.next()) { System.out.print(res.getString(1)); System.out.print(' ' + res.getString(2)); System.out.print(' ' + res.getString(3)); System.out.println(' ' + res.getString(4)); } } catch(Exception e) { e.printStackTrace(); } } @After public void tearDown() throws Exception { // Close DB connection if (con != null) { con.close(); } } }
위 코드의 출력은 다음과 같습니다.
1 shruti 25 Noida
2 shrivastava 55 뭄바이
문 변형 읽기
단일 조건이있는 Where 절
문자열 쿼리 = 'select * from userinfo where userId = ''+ 1 + '‘';
ResultSet res = stmt.executeQuery (query);
산출:
1 shruti 25 Noida
여러 조건이있는 Where 절
문자열 주소 =”Mumbai”;
문자열 쿼리 = 'select * from userinfo where userId = ''+ 2 + '‘and userAddress =''+ Address + '‘';
ResultSet res = stmt.executeQuery (query);
산출:
2 shrivastava 55 뭄바이
사용자 ID 표시
문자열 쿼리 = 'userinfo에서 userId 선택';
ResultSet res = stmt.executeQuery (query);
산출:
1
두
where 절을 사용하여 사용자 ID 표시
문자열 주소 =”Noida”;
String query =“select userId, userName from userinfo where userAddress = '”+ Address +”‘”;
ResultSet res = stmt.executeQuery (query);
산출:
두
Shrivastava
따라서 같은 방법으로 사용자는 데이터베이스에서 다양한 쿼리를 실행할 수 있습니다.
이를 통해 결과 접근성 방법에 대해서도 설명하겠습니다.
결과 접근성 방법 :
방법 이름 | 기술 |
---|---|
더블 getDouble () | 메소드는 결과 세트에서 이중 유형 데이터를 가져 오는 데 사용됩니다. |
문자열 getString () | 메소드는 결과 세트에서 문자열 유형 데이터를 가져 오는 데 사용됩니다. |
int getInt () | 메소드는 결과 세트에서 정수 유형 데이터를 가져 오는 데 사용됩니다. |
부울 getBoolean () | 메소드는 결과 세트에서 부울 값을 가져 오는 데 사용됩니다. |
float getFloat () | 메소드는 결과 세트에서 부동 유형 데이터를 가져 오는 데 사용됩니다. |
긴 getLong () | 메소드는 결과 세트에서 긴 유형 데이터를 가져 오는 데 사용됩니다. |
짧은 getShort () | 메소드는 결과 세트에서 짧은 유형 데이터를 가져 오는 데 사용됩니다. |
날짜 getDate () | 메서드는 결과 집합에서 날짜 유형 개체를 가져 오는 데 사용됩니다. |
결과 탐색 방법 :
방법 이름 | 기술 |
---|---|
부울 next () | 방법은 결과 집합의 다음 레코드로 이동하는 데 사용됩니다. |
부울 이전 () | 메소드는 결과 세트의 이전 레코드로 이동하는 데 사용됩니다. |
부울 first () | 메소드는 결과 세트의 첫 번째 레코드로 이동하는 데 사용됩니다. |
부울 last () | 메소드는 결과 세트의 마지막 레코드로 이동하는 데 사용됩니다. |
부울 절대 (int rowNumber) | 방법은 결과 집합의 특정 레코드로 이동하는 데 사용됩니다. |
결론
이 튜토리얼을 통해 우리는 여러분이 자동화 된 데이터베이스 테스트 . 우리는 데이터베이스 테스팅의 기술적 의미와 요구 사항을 분명히 강조했습니다.
전체 시리즈가 Selenium에 초점을 맞추었기 때문에 독자는이 튜토리얼이 Selenium을 사용하여 데이터베이스 테스트를 수행하도록 가르 칠 것이라는 인상을 줄 수 있지만 이전에 여러 번 언급했듯이 UI 테스트의 주변에있는 모든 것 , Selenium에서 처리 할 수 없습니다. 따라서 Selenium WebDriver 스크립트 내에 코드를 임베드하여 데이터베이스 테스트를 수행하기 위해 Java Database Connectivity (JDBC) API를 도입합니다.
JDBC를 사용하면 Java 클래스가 데이터베이스에 연결하고 데이터베이스에서 데이터를 검색하거나 실제로 CRUD 작업을 수행하고 결과 데이터를 조작하고 연결을 닫을 수 있습니다.
따라서 자습서는 위에서 언급 한 프로세스의 기본 샘플 구현을 구성합니다.
다음 튜토리얼 # 29 : 우리는 고급 Selenium 주제로 나아갈 것입니다. 다음 튜토리얼에서는 다중 브라우저 테스트를 수행해야하고 많은 수의 테스트 케이스가있을 때 사용되는 Selenium GRID에 대해 다룰 것입니다.
추천 도서
- JMeter를 사용한 데이터베이스 테스트
- Selenium과 JMeter의 통합
- Cucumber Selenium 튜토리얼 : Cucumber Java Selenium WebDriver 통합
- Selenium WebDriver 소개 – Selenium Tutorial # 8
- 최고의 소프트웨어 테스트 도구 2021 (QA 테스트 자동화 도구)
- 첫 번째 WebDriver 스크립트 구현 – Selenium WebDriver Tutorial # 10
- 최고의 온라인 Selenium WebDriver + JAVA 교육 과정
- Selenium과의 통합 및 기능 테스트를위한 Spock