로봇 프레임워크 기반의 자동화 시각 테스트
1. 머리말
로봇 프레임이 뭔지 몰라도 계속 읽을 만하다.DocTest 라이브러리는 테스트 시간을 많이 절약할 수 있지만 로봇 프레임워크에 대한 지식이 필요합니다.로봇 프레임이 무엇인지 모르면, 좋은 소개를 얻기 위해 이전의 댓글을 읽어 보세요.
여기까지 소개하고 어떻게 일하는지 봅시다.이 글에서 사용된 정보의 출처는 GitHub를 통해 얻을 수 있다.
2. 설치
다음 설치 지침은 Ubuntu 20.04.2 LTS 릴리즈에서 수행됩니다.pip를 사용하면 설치가 간단합니다.
$ pip install --upgrade robotframework-doctestlibrary
DocTest는 다른 응용 프로그램을 사용하려면 해당 응용 프로그램을 설치해야 합니다. 그렇지 않으면 오류가 발생할 수 있습니다.$ apt-get install imagemagick
$ apt-get install tesseract-ocr
$ apt-get install ghostscript
$ apt-get install libdmtx0b
위의 응용 프로그램을 설치하지 않으면 DocTest 키워드Compare Images
를 사용하면 다음 오류가 발생합니다.[ ERROR ] Error in file '/<path>/MyDocTestPlanet/visual_test.robot' on line 2: Importing library 'DocTest.VisualTest' failed: ImportError: Unable to find dmtx shared library
PDF 파일을 비교하는 경우 ImageMagick이 라이브러리에서 다음과 같은 오류를 일으킬 수 있습니다.File could not be converted by ImageMagick to OpenCV Image: testdata/sample_1_page.pdf
CLI에서 ImageMagick을 사용하여 PDF를 JPG 파일로 변환하려고 하면 더 큰 오류가 발생합니다.$ convert sample.pdf sample.jpg
convert-im6.q16: attempt to perform an operation not allowed by the security policy
ImageMagick은 기본적으로 문제를 일으키는 다음 줄을 포함하는 policy.xml
파일을 사용합니다.<!-- disable ghostscript format types -->
<policy domain="coder" rights="none" pattern="PS" />
<policy domain="coder" rights="none" pattern="PS2" />
<policy domain="coder" rights="none" pattern="PS3" />
<policy domain="coder" rights="none" pattern="EPS" />
<policy domain="coder" rights="none" pattern="PDF" />
<policy domain="coder" rights="none" pattern="XPS" />
DocTest 저장소의 루트 디렉토리에 policy.xml
파일이 있습니다./etc/ImageMagick-6/policy.xml
파일의 파일을 저장소의 파일로 대체합니다.이제 전환하면 될 것 같습니다.3. 실천 중
이 절에서 이 라이브러리를 어떻게 사용하는지 배울 것입니다.이 라이브러리의 GitHub 저장소에는 라이브러리를 어떻게 사용하는지 보여주는 좋은 예도 있습니다.저장소를 복제하고 루트 디렉토리에서 테스트를 실행하려면 다음과 같이 하십시오.
$ robot atest/Compare.robot
단, 자신이 만든 프로젝트에 적용되는지 확인하는 것도 좋습니다.기본 이미지로 타임 스탬프를 포함하는 맵을 만들었습니다.모든 이미지는 images
디렉토리에 있습니다.원본 도면*.odg
파일이 있고 저장된 파일*.png
은 예에서 사용됩니다.기본 이미지는 base-image.png
입니다.
3.1 작은 차이점 비교
네가 해야 할 첫 번째 비교는 그 중의 삼각형
base-image-with-triangle-difference.png
이 조금 다르다는 것이다.이 점을 직관적으로 비교하고 싶을 때, 당신은 아주 작은 차이이기 때문에 차이를 찾기가 매우 어려울 것이다.그렇다면 우리는 어떻게 박사 도서관을 통해 이 점을 해낼 수 있을까?적절한 테스트는 다음과 같습니다.| *** Settings *** |
| Library | DocTest.VisualTest
| *** Test Cases *** |
| 01 | [Documentation] | Compare Two Images With Triangle Difference
| | Compare Images | images/base-image.png | images/base-image-with-triangle-difference.png
라이브러리를 가져온 후 유일하게 해야 할 일은reference와canditate 이미지 실행 Compare Images
키워드입니다.테스트를 실행하려면 다음과 같이 하십시오.$ robot visual_test.robot
차이가 존재하기 때문에 테스트는 분명히 실패했다.diff 이미지가 있는 디렉터리 screenshots
가 생성되었음을 알 수 있습니다.그러나 Robot 프레임워크 결과가 있는 log.html
파일을 여는 것이 더 쉽다.
이 결과는 매우 유용해서, 당신은 즉시 차이점을 알아차릴 수 있을 것이다.예상한 바와 같이 삼각형은 차이를 나타내지만 시간 스탬프를 나타낸다.이 화면 캡처 옆에 조합 차분 이미지가 있습니다.결과는 GitHub 저장소에서 확인할 수 있습니다.
3.2 타임 스탬프의 작은 차이 비교 무시
그러나 앞의 비교에는 문제가 하나 있다.지도에 차이가 없고 캡처가 서로 다른 시간에 촬영할 때 비교는 두 장의 지도를 서로 다르게 표시한다.니가 원하는 게 아닐 수도 있어.이 라이브러리는 마스크를 통해 해결 방안을 제공합니다.JSON 파일에서 마스크를 정의할 수 있으며 비교 과정에서 무시해야 할 항목을 정의할 수 있습니다.이 예에서는 다음과 같이
masks/mask-date.json
파일을 생성합니다.[
{
"page": "all",
"name": "Date Pattern",
"type": "pattern",
"pattern": ".*[0-9]{2}-[0-9]{2}-[0-9]{4}"
}
]
사용하는 모델은 간단한 정규 표현식이다.테스트 용례는 추가 placeholder_file
인자만 필요합니다.| 02 | [Documentation] | Compare Two Images With Triangle difference and Time Mask
| | Compare Images | images/base-image.png | images/base-image-with-triangle-difference.png | placeholder_file=masks/masks-time.json
현재 테스트를 실행할 때 삼각형에 차이가 있기 때문에 실패했습니다. 그러나 비교 화면 캡처에서 날짜는 파란색으로 표시됩니다. 이것은 비교 과정에서 무시된다는 것을 의미합니다.
그림이 시간 외에 모두 동일할 때 성공했는지 확인해 봅시다.
| 03 | [Documentation] | Compare Two Images With Time Mask
| | Compare Images | images/base-image.png | images/base-image-with-time-difference.png | placeholder_file=masks/masks-time.json
네, 그림의 시간은 다르지만 테스트는 성공했습니다.
좋아, 너는 지금 네가 원하는 그림만 비교하고, 어쨌든 다른 항목은 무시할 수도 있어.
3.3 무시 영역의 작은 차이 비교
패턴 외에도 무시할 영역을 정의할 수 있습니다.다음을 포함하는
masks/mask-bottom.json
파일을 만듭니다.[
{
"page": "all",
"name": "Header Area",
"type": "area",
"location": "bottom",
"percent": 10
}
]
이번에는 아래쪽 영역과 백분율을 지정합니다.테스트 용례는 다음과 같습니다.| 04 | [Documentation] | Compare Two Images With Bottom Mask
| | Compare Images | images/base-image.png | images/base-image-with-triangle-difference.png | placeholder_file=masks/masks-bottom.json
이 테스트를 실행하면 그림의 밑부분이 무시됩니다.
3.4 작은 움직임과 비교
물건 하나가 조금 움직일 때 차이를 발견하기 어렵다.예상과 실제 결과 이미지를 제외하고 로봇 프레임워크 로그는 우리에게 조합 결과를 보여 주었다.테스트:
| 05 | [Documentation] | Compare Two Images With Small Move
| | Compare Images | images/base-image.png | images/base-image-with-small-move.png
종합적인 결과에서 너는 차이를 더욱 잘 볼 수 있다.
이런 작은 움직임을 받아들이고 싶다면?한 항목이 조금 움직였을 때 테스트에 실패하고 싶지 않다는 얘기다.이 경우
move_tolerance
매개 변수를 추가하고 허용되는 픽셀 수를 지정할 수 있습니다.이전 테스트는 다음과 같습니다.| 06 | [Documentation] | Compare Two Images With Small Move And Move Tolerance
| | Compare Images | images/base-image.png | images/base-image-with-small-move.png | move_tolerance=10
현재 테스트가 성공적으로 통과되었는데, 그 결과 작은 동작이 발견되었다.
3.5 PDF 비교
그림처럼 PDF 파일을 비교할 수도 있습니다.비교 보고서가 필요할 때 유용합니다.리포트는
pdf/base-report.pdf
에서 얻을 수 있습니다(원시 리포트base-report.odt
도 얻을 수 있습니다).보고서pdf/base-report-with-small-difference.pdf
에는 드라이버의 금액과 날짜가 포함되어 있습니다.테스트는 이미지와 유사합니다. 이번에 get_pdf_content
파라미터를 제공하여 true
로 설정합니다.| 07 | [Documentation] | Compare Two PDF Files With Small Difference
| | Compare Images | pdf/base-report.pdf | pdf/base-report-with-small-difference.pdf | get_pdf_content=${true}
마찬가지로 로그 파일은 차이점을 정확하게 보여 줍니다.
마스크도 이런 비교에 적용된다.데이트 마스크팩을 발라봅시다.
| 08 | [Documentation] | Compare Two PDF Files With Small Difference and Date Mask
| | Compare Images | pdf/base-report.pdf | pdf/base-report-with-small-difference.pdf | placeholder_file=masks/masks-date.json | get_pdf_content=${true}
예상한 대로 금액 차이만 표시하고 날짜는 파란색으로 표시해서 무시되었음을 표시합니다.
4. 결론
Robot Framework DocTest 라이브러리는 이미지와 보고서의 차이를 비교하는 데 매우 강력한 라이브러리입니다.그것은 사용이 간단하고 정상적이다.테스트 과정에서 그것을 적용할 때, 이것은 틀림없이 시간을 크게 절약할 뿐만 아니라, 테스트 오류의 기회도 줄일 것이다.
Reference
이 문제에 관하여(로봇 프레임워크 기반의 자동화 시각 테스트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mydeveloperplanet/automated-visual-testing-with-robot-framework-2n8o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)