로봇 프레임워크 기반의 자동화 시각 테스트
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.)