이 접근法을 어떻게 구현할 수 있呢?
前沿端開発过程中에서 data-testid
접근法을 적용하는 것은 설정부터 이를 효과적으로 사용하기 위한 가장 좋은 惯例을 따르는 여러 단계를 거쳐야 한다. 이러한 접근法을 어떻게 구현하는 것인가에 대한 단계별 가이드를 다음과 같이 제시하며 있다.
시험 첫 order of mind
시험 计画
コーディング에 들어가기 전에, UI component design에 대한 시험 가능성이 주요 요인으로 들어가는지 확인하고, data-testid
를 어디에 적용할 것인지 다음과 같이 모음을 Discuss with your team.
QA Engineer를 早期참여
開発 과정에서 QA engineer를 早期 참여시키는 것은, data-testid
attribute가 필요한 element를 식별하는데 도울 것이다. 이 협업은 component가 시험을 대상으로 디자인되었다는 것을 보장한다.
data-testid Attributes를 자신의 Components에 추가하기
Key Element를 식별하기
UI에서 시험에서 중요한 element를 결정하는 것이다. 이들은 버튼, form input, 링크, 시험이 interact with 할 것이다.
data-testid를 적용하기
이러한 key element에 data-testid
attribute를 추가하자. 예를 들어:
<button data-testid="submit-button">Submit</button>
<input data-testid="username-input" type="text" />
Selective를 避け
모든 single element에 data-testid
를 추가하는 것을 避け자. element가 시험 사례에 ímpact하는지 대신에 focus하자. data-testid
를 overusing하면 HTML을 더욱 혼란하게 만들 수 있으며 관리하기를 더욱 어려울 수 있다.
data-testid를 사용하여 시험 스크립트 쓰기
기존 테스트 업데이트
기존 테스트 스위트가 있다면, 해당되는 부분에서 data-testid
선택자를 사용하도록 테스트를 리펙토링하십시오. 이렇게 하면 테스트의 안정성이 향상됩니다. Playwright와 Cypress의 예시입니다:
// Playwright에서 data-testid를 사용하는 테스트
await page.click('[data-testid="submit-button"]');
await page.fill('[data-testid="username-input"]', 'testuser');
// Cypress에서 data-testid를 사용하는 테스트
cy.get('[data-testid="submit-button"]').click();
cy.get('[data-testid="username-input"]').type('testuser');
테스트 가독성 유지
data-testid
에는 의미있고 설명적인 값을 사용하십시오. 이렇게 하면 테스트의 가독성이 높아지고 이해하기 쉬워집니다.
개발 워크플로에 data-testid 통합
사용 표준화
프로젝트에서 data-testid
에 대한 지침이나 명명 규칙을 만드십시오. 이렇게 하면 코드베이스 내에서 일관성을 유지하고 모든 팀원이 따라가기 쉽습니다.
코드 리뷰
코드 리뷰를 하는 동안 data-testid
속성이 적절하고 일관성 있게 사용되고 있는지 확인하십시오. 의미 있고 테스트에 필요한지 확인하십시오.
data-testid 사용的最佳实践
- 하이픈이 들어간 이름 사용:
data-testid
값에는 하이픈ated이나 snake_case 명명 규칙을 선호합니다 (예:submit-button
,username_input
). 이렇게하면 이름이 일관성 있고 가독성 있게 유지됩니다. - 동적 데이터 사용 자제:
data-testid
값에는 타임스탬프나 ID와 같은 동적 데이터를 포함하지 마십시오. 이러한 데이터는 변경되어 선택자의 신뢰성을 떨어뜨릴 수 있습니다. - balancetestcoverage : 중요한 UI 요소에 대한 테스트를 위해
data-testid
를 사용하지만 그에 過剰하게 依存하지 마십시오. 적절하게 다른 선택자와 결합하여 모두의 테스트를 포함하는 것을 유지하십시오.
자동 開発의 영향 평가
- 자동화 안정性 :
data-testid
가 안정적인 선택자를 제공하므로, 자동화 테스트가 더 신뢰도 있고 유지하기 쉬워집니다. 불안정한 테스트를 줄이고 있습니다. - 시간 절약 : 테스트 유지 관리 시간의 감소로 퀀티 앱 tea m은 새로운 테스트 쓰는 것과 테스트 涵蓋 Area를 改善하는 것에 초점을 맞춰 일을 하는 것입니다.
- 협업 改善 : 開発자와 QA 엔지니어가 더 효과적으로 일을 하는 것입니다. 原因是
data-testid
의 사용이 간단하고 각 테스트의 의미를 명확하게 하기 때문입니다.
자동화 및 테스트 유지
- CI/CD 통합 : 자동화 테스트 수렴을 통합 개발/지속 배포 (CI/CD) 파이프라인에 결합하십시오. 이렇게 자동 테스트는 모든 코드 푸시 시에 실행되어 应用程序이 안정적이라고 보장합니다.
- 모니터링 및 更新 : 응용 프로그램이 진행되는 것을 주기적으로 확인하십시오. 신규 기능이 개발되면 새로운
data-testid
어트리BUTES를 추가하거나 수정하십시오.
그룹에 지식 普及
- 교육 : 그룹에 적절하게
data-testid
를 개발과 테스트에서 사용하는 방법에 대한 교육 ses sion 또는 문서를 제공하십시오. - 持続的改善: 팀이
data-testid
사용에 대한 피드백을 받고, 그 입력을 기반으로 접근법을 정제합니다.
이 접근법을 여러 가지 프레임워크에 어떻게 적용할 수 있나요?
data-testid
접근법을 Selenium, Playwright, Cypress와 같은 다양한 테스트 프레임워크에 적용하려면 각 도구가 DOM과 어떻게 상호 작용하는지 이해하고 data-testid
속성을 사용하여 안정적고 신뢰할 수 있는 테스트 스크립트를 만드는 방법을 알아야 합니다. 다음은 각 도구를 사용하여 이 접근법을 구현하는 자세한 가이드입니다.
1. Selenium
Selenium은 ID, 클래스, 이름, XPath와 같은 로케이터를 사용하여 웹 엘리먼트와 상호 작용합니다. data-testid
를 사용하면 페이지의 시각적 구조와 독립적인 안정적인 선택자를 생성할 수 있습니다. 예를 들어 로그인 폼이 있고, 그에는 사용자 이름 필드, 패스워드 필드, 그리고 제출 버튼이 있습니다.
- HTML 코드:
<form>
<input data-testid="username-input" type="text" name="username" />
<input data-testid="password-input" type="password" name="password" />
<button data-testid="submit-button" type="submit">Login</button>
</form>
- Selenium 테스트 스크립트:
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
public class LoginTest {
public static void main(String[] args) {
WebDriver driver = new ChromeDriver();
driver.get("http://yourapp.com/login");
// data-testid를 사용하여 엘리먼트를 위치시킴
WebElement usernameInput = driver.findElement(By.cssSelector("[data-testid='username-input']"));
WebElement passwordInput = driver.findElement(By.cssSelector("[data-testid='password-input']"));
WebElement submitButton = driver.findElement(By.cssSelector("[data-testid='submit-button']"));
// 엘리먼트와 상호 작용
usernameInput.sendKeys("testuser");
passwordInput.sendKeys("password");
submitButton.click();
// 추가적인 동작 또는 어서션 수행
driver.quit();
}
}
Selenium의 이점
- 안정성: Selenium에서
data-testid
를 사용하면 UI 변경에 따라 로케이터가 손상되는 가능성이 줄어듭니다. - 유지 관리성:
data-testid
는 클래스나 ID와 비교했을 때 변경될 가능성이 적어서 테스트를 업데이트 또는 리팩터링하는 데 더 쉽습니다.
2. Playwright
Playwright는 웹 应用程序에 대한 강력한 자동화 기능을 제공합니다. CSS, 텍스트, XPath, 및 data-testid
과 같은 선택자를 지원합니다.
예시
동일한 로그인 폼 예시를 사용하면:
- Playwright 테스트 스크립트 (TypeScript):
import { chromium, Browser, Page } from 'playwright';
(async () => {
const browser: Browser = await chromium.launch();
const page: Page = await browser.newPage();
await page.goto('http://yourapp.com/login');
// data-testid를 사용하여 요소를 찾기
await page.fill('[data-testid="username-input"]', 'testuser');
await page.fill('[data-testid="password-input"]', 'password');
await page.click('[data-testid="submit-button"]');
// further actions or assertions를 실행하거나 유효성 검사
await browser.close();
})();
Playwright의 이점
- 효율: Playwright의
data-testid
지원은 concise and clear test scripts를 작성하는 데 도움이 됩니다. - 鲁莽:
data-testid
선택자는 DOM 구조의 변경으로부터 test scripts를 더 이상 유지하는 데 도움이 됩니다.
3. Cypress
Cypress는 JavaScript end-to-end 테스트 프레임워크로, 멋진 개발자 경험을 제공합니다. 同样, data-testid
어트리BUTE를 요소 찾기 위해 지원합니다.
예시
동일한 로그인 폼을 사용하면:
- Cypress 테스트 스크립트 (JavaScript):
describe('Login Test', () => {
it('should login with valid credentials', () => {
cy.visit('http://yourapp.com/login');
// data-testid를 사용하여 요소를 찾기
cy.get('[data-testid="username-input"]').type('testuser');
cy.get('[data-testid="password-input"]').type('password');
cy.get('[data-testid="submit-button"]').click();
// further actions or assertions를 실행하거나 유효성 검사
cy.url().should('include', '/dashboard');
});
});
Cypress의 이점
- 개발자 경험: Cypress의 문법과
data-testid
를 결합하면 읽기 좋고 유지하기 容易한 test scripts를 얻을 수 있습니다. - 실험 안정성:
data-testid
선택자는 UI의 변경에 의해 breaking하는 것을 줄어들이는 것을 방지하기 위해 tests가 더 안정적이게 만듭니다.
data-testid
- 의미 있는 이름 사용:
data-testid
어트리BUTE를 의미 있는 이름을 사용하세요. 例如,data-testid="submit-button"
는data-testid="btn1"
보다 의미 있습니다. - 일관성:
data-testid
를 응용하는 방식에 일관성을 유지하세요. 이렇게 하면 일관성있는 시험 스크립트를 생성하는 것이 도울 수 있습니다. - 사용 제한: 시험을 위해 중요한 요소에만
data-testid
를 적용하세요. HTML에 赘馀적으로 많이 사용하지 마십시오. - 동적 데이터 避免:
data-testid
어트리BUTE에 시간 표시 또는 유일한 ID와 같은 동적 값을 포함하지 마십시오. 이러한 값이 변경되면 시험이 실패하게 되므로 주의 깊게 생각하십시오.
결론
스캔(Scan) 기반의 front-end 개발 과정에서 data-testid
기법을 적용하면 Selenium, Playwright, Cypress과 같은 다양한 시험 프레임워크에서 중요한 이점을 얻을 수 있습니다. 이를 통해 시험 스크립트의 안정性, 읽기 쉬움, 유지 수능성을 향상시키고 이를 통해 신뢰성이 높은 시험과 보다 효율적인 QA 과정을 실현할 수 있습니다. 제공된 예시와 ベスト 프ACTICES를 따라하면 data-testid
를 workflow에 native하게 통합하고 제품의 전체 quality를 改善시키는 것이 어렵지 않습니다.
referrence
Source:
https://dzone.com/articles/how-data-testid-can-revolutionize-ui-testing