2017-10-24 9 views
-1

사실 나는 런타임 값을 캡처하여 추가 실행을 위해 전달해야합니다. 순차적 실행에서 완벽하게 작동하지만 원격 실행 (소스 랩에서)을 수행 할 때 실행 시간 값이 브라우저간에 상호 교환되어 실패로 연결됩니다. (각 브라우저는 별도의 값을 가져야하기 때문에)병렬 실행 셀레늄 java에서 런타임 변수를 저장하는 방법?

제발 저에게 빛을 던져 주시겠습니까?

감사합니다. Kris.

+0

지금까지 시도한 내용은 무엇입니까? – loki

+0

나는 u 값을 동 기적으로 반환하는 메서드를 테스트하도록 우선 순위를 설정할 수 있다고 생각한다. https://www.guru99.com/testcase-priority-testng.html – Pradeep

+0

답장을 보내 주셔서 감사합니다. Pradeep & Loki .. 솔루션을 얻었습니다. 실제 시나리오에서 동일한 테스트 사례가 10 개의 브라우저에서 실행됩니다. ID와 추후 실행에 패스, 순차적으로 잘 동작하지만 병렬 실행 ID의 변수가 다른 하나와 겹치기는하지만 이제는 스레드 로컬 변수로 고정 됨 – Kris

답변

0

감사합니다 ..! 솔루션은 ThreadLocal 변수 개념을 가지고 있습니다.

내 프레임 워크의 대부분의 환경 특정 값은 STATIC으로 정의됩니다.

Java에서 정적 변수는 스레드간에 데이터를 공유하는 데 사용됩니다. 즉, 이러한 변수가 스레드에서 동일하다는 것을 의미합니다. 이 경우 두 번째 스레드가 정적 변수에 값을 할당하면 첫 번째 스레드가 설정 한 값을 무시합니다. 이로 인해 문제가 발생합니다.

위의 문제를 극복하기 위해 고려할 수있는 두 가지 방법이 있습니다.

1) java의 모든 로컬 변수는 스택 메모리에 저장되며 각 스레드는 자체 스택을 가지고 있습니다. 따라서 변수를 지역 변수로 변경하면 문제가 해결됩니다.

2) 기존 프레임 워크에서 위와 같은 접근 방식으로 많은 의존성이 깨집니다. 그리고 지역 변수를 만드는 것은 쉽지 않습니다. 그래서 우리는 더 나은 해결책을 찾아야합니다. 이러한 유형의 상황에서는 Java에 ThreadLocal 변수가 있습니다.

http://learn-testing-urself.blogspot.in/2015/05/importance-of-threadlocal-in-parallel.html

관련 문제