2013-08-11 2 views
0

저는 작은 소프트웨어 회사에서 UI 테스터로 일하고 있습니다. 필자의 삶을 편하게하기 위해 모든 페이지에서 실행되는 표준 테스트 중 일부를 자동으로 생성하는 Python으로 스크레이퍼를 작성하려고합니다. 테스트는 Quicktest Pro를 사용하여 수행되며 VBScript로 작성해야합니다. 데이터를 만드는 모든 페이지에는 전체 사례가 있어야하며 페이지의 모든 필드가 채워지는 경우와 필요한 경우에만 필드가 채워지는 경우가 줄어 듭니다.페이지의 어떤 필드가 필요한지 결정하십시오.

대소 문자를 구분해야합니다. 이미 인증 된 쿠키로 requests.Session 개체를 설정하고 해당 페이지에 GET 요청을 보내고 BeautifulSoup을 사용하여 응답을 구문 분석합니다.

감소한 경우에는 접근 방법이 확실하지 않습니다. 나는 그것에 대해 갈 수있는 세 가지 방법을 생각할 수 있지만 그 중 아무 것도 훌륭하지 않습니다.

A) 빈 페이지를 제출해보십시오. "* <field>은 필수 입력란입니다."형식의 오류 메시지에 대한 응답을 확인하십시오. 이름이 지정된 것과 가장 가까운 필드를 찾으십시오. 그들을 채 웁니다. 다시 제출하고 반복하여 필드가 성공적으로 완료 될 때까지 추가하고 필드 목록을 반환하십시오.

오류 메시지가 어느 필드에 해당하는지 식별하기가 어렵 기 때문에이 방법은 그리 좋지 않습니다. "* 생년월일이 필요합니다"라는 메시지는 실제로 HTML ID가 "dob_entry1"인 양식 요소를 참조 할 수 있습니다. 또한 원본의 개발 복사본을 테스트 중이므로 부분적으로 채워진 양식으로 인해 서버 오류가 발생하는 것은 드문 일이 아니며이 방법으로 생성 한 데이터를 수동으로 정리해야 할 수도 있습니다.

B) 완전히 기입 된 양식으로 보냅니다. 방금 생성 된 데이터베이스 레코드를 찾고 어떤 열이 NULL이 아닌지 확인하십시오. 열 이름을 필드 이름과 일치시키고 결과 목록을 반환합니다.

이것은 더 유망한 것처럼 보이지만 작성된 레코드를 찾는 방법을 알지 못합니다. MySQL 서버에서는 로그 (에러 제외)가 켜지지 않고 서버에 15 개의 데이터베이스가 있습니다. 모든 데이터베이스는 개발자가 작업 중이므로 서버의 전역 변수를 사용하여 데이터베이스를 켤 수는 없습니다 . 방금 전달한 모든 값에 대해 데이터베이스를 쿼리 할 수는 있지만 데이터베이스에 꽤 많은 양의 데이터가 있으므로 예를 들어 출생 날짜를 확인하는 것이 불가능할 것입니다. 내가 방금 제출 한 것.

googling,이 도구는 http://hackmysql.com/mysqlsniffer 일 수 있지만 개발자가 서버에서 다른 DB를 동시에 사용하므로 서버 전체에 아무런 변화가 없습니다. SQL에 대한 많은 경험이 없으므로이 작업을 수행하는 방법을 잘 모릅니다.

C) 어쨌든 C# 소스 코드를 구문 분석하여 주어진 페이지에 해당하는 쿼리를 찾습니다. 어떤 컬럼이 영향을 미치는지 알아보고 어느 것이 NULL이 아닌지 알아 내기 위해 데이터베이스를 질의하고, 컬럼 이름을 필드 이름과 일치시키고리스트를 반환한다.

저는 C#에 대한 경험이 없으므로 이것이 얼마나 실현 가능성이 있는지 모르겠지만 PHP라면 매우 간단 할 것이라고 생각합니다. 내가 주위를 훑어 보았지만 사이트의 소스를 찾을 수는 있었지만 아직 그 중 하나를 보지 못했습니다. 이 웹 사이트는 10 년이 넘었고 꽤 방대해서 소스 파일과 일치하는 페이지 이름은 아마 사소한 것입니다.

폼의 어떤 필드가 페이지 제출을 요구하는지 알아내는 것이 스크레이퍼에게는 매우 일반적인 작업이지만, Google은별로 도움이되지 않는다고 생각했습니다. 이러한 접근법 중 합리적인 것이 있습니까? 내가 누락 된 쉬운 해결책이 있습니까?

+0

필드의 HTML을 확인하고 "필수"속성이 있는지 확인하기 만하면됩니다. –

답변

1

HTML 응답에서 필요한 필드를 찾는 것이 가장 안전한 방법이라고 생각합니다. 필드 이름을 데이터베이스 열 이름과 일치 시키려고하면 실제 문제가 될 수 있습니다. 데이터가 데이터베이스에 저장 될 때까지 얼마나 많은 레이어가 있는지 전혀 알지 못합니다. 필드 이름은 열 이름처럼 보이지 않습니다.

필드가 필요한지 확인하는 것은 너무 어려워서는 안됩니다. 전체 양식으로 시작하여 제출하여 합법적인지 확인하십시오. 그런 다음 첫 번째 입력란없이 양식을 다시 보냅니다. 오류가 발생하는 경우 필드가 필요합니다. 첫 번째 필드를 다시 채우고 두 번째 필드를 지우고 다시 시도하십시오. 양식의 모든 필드에 대해이 작업을 수행하십시오.

웹 응용 프로그램이 작동하려면 충분히 안정되어야합니다. 누락 된 필드 오류와 서버 오류의 차이점을 알 수 있어야합니다.

@Ming Slogar의 의견을 확인하십시오. HTML 사용자가 HTML에서 필수 필드로 표시 한 경우 손에 많은 시간을 할애해야합니다.

+0

내일 들어가면 다시 확인 하겠지만 99 %는 "필수"속성을 가진 필드가 없음을 확인합니다. 이 접근법은 제 것보다 더 합리적입니다. 필드 채우기의 가능한 모든 조합을 검사해야한다고 생각했습니다. 조건부로 필요한 필드가 많은 페이지에 있기 때문에 약간 과대 평가됩니다. 예. 직원이 "출발 이유"를 설정 한 경우 "출발 날짜"도 설정해야합니다. 적어도이 감소 된 필드 집합의 모든 조합을 검사하는 것이 더 빠를 것이라고 생각합니다. –

관련 문제