반응형
ver.1 으로 ui 테스팅 기능을 완료함.
'use strict';
/**
* testcase service
*/
const { createCoreService } = require('@strapi/strapi').factories;
const { chromium, devices } = require('playwright');
const {
loopElement,
startTaskLoopElements,
} = require('../../../modules/testcase/loopElement');
const {
elementValidation,
} = require('../../../modules/testcase/validationList');
module.exports = createCoreService('api::testcase.testcase', ({ strapi }) => ({
async playTestcase(ctx, query) {
const browser = await chromium.launch({
headless: false,
channel: 'chrome',
logger: {
//isEnabled: (name, severity) => name === 'browser',
isEnabled: (name, serverity) => true,
log: (name, severity, message, args, hints) =>
console.log(
`name:${name},message:${message},severity:${severity},args:${args}`
),
},
downloadsPath: './',
});
const testNm = await strapi.entityService.findMany(
'api::testcase.testcase',
{
filters: { id: query.id, USE_YN: 'Y' },
sort: { id: 'DESC' },
populate: { TESTCASE_ELEMENTS: { filters: { USE_YN: 'Y' } } },
}
);
// const mobile = devices['iPhone 13 Pro'];
const elements = await testNm[0].TESTCASE_ELEMENTS;
// SORT_NO 기준으로 오름차순
const elementsDesc = await elements.sort(function (a, b) {
return a.SORT_NO - b.SORT_NO;
});
const innerTextList = [];
const tableTextList = [];
// Open new page
const context = await browser.newContext(); // PC버전
const page = await context.newPage();
try {
// 테스트 시작점.
await loopElement(elementsDesc, async (ele) => {
try {
await startTaskLoopElements(ele, page, innerTextList, tableTextList);
// 루프를 돌면서 계속 검증함.
if (ele.VALIDATION_YN === 'Y') {
await elementValidation(innerTextList, tableTextList);
}
} catch (err) {
console.log(err);
const resMessage = {
errorLogs: JSON.stringify(err),
errorElement: ele,
};
throw resMessage;
}
});
await browser.close();
return {
result: 'success',
message: `${testNm[0].TEST_NM} 케이스 테스트에 성공하였습니다.`,
};
} catch (err) {
const screenshotName = new Date().getTime();
err.screenshotPath = screenshotName;
// 위의 catch에서 받아온 err
await page.screenshot({
path: `./src/screenshot/${screenshotName}.png`,
});
await browser.close();
ctx.response.badRequest(
`${testNm[0].TEST_NM} 케이스 테스트에 실패하였습니다.`,
`${JSON.stringify(JSON.stringify(err))}`
);
throw err;
}
},
}));
반응형
'백엔드 > Strapi' 카테고리의 다른 글
[playwright] mouse.click vs locator.click (0) | 2023.05.28 |
---|---|
[strapi] rest api query 연산자 목록 (0) | 2023.03.12 |
[UI 자동화 테스팅] 서브테스크 기능 개발 (0) | 2022.11.14 |
자동화 테스트 1차 완성 (0) | 2022.11.03 |
strapi.service VS strapi.entityService (0) | 2022.10.12 |