added 'one-to-one chat between different networks' and 'switch network' tests, also added marks for local runs

This commit is contained in:
Anton Danchenko 2017-10-11 23:10:57 +03:00
parent 33f5c74243
commit 030ceecc21
9 changed files with 193 additions and 12 deletions

View File

@ -1,6 +1,6 @@
node {sauce('b9aded57-5cc1-4f6b-b5ea-42d989987852') {
checkout([$class: 'GitSCM', branches: [[name: '*/develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/status-im/status-react.git']]])
try {sh 'cd test/appium/tests && /usr/local/bin/python3 -m pytest -m sanity --build ${JOB_NAME}__${BUILD_NUMBER} -v --dist=loadscope -n3'
try {sh 'cd test/appium/tests && /usr/local/bin/python3 -m pytest -m all --build ${JOB_NAME}__${BUILD_NUMBER} -v --dist=loadscope -n3'
}
finally {
saucePublisher()

View File

@ -77,8 +77,7 @@ class AbstractTestCase:
desired_caps['platformName'] = 'Android'
desired_caps['appiumVersion'] = '1.7.1'
desired_caps['platformVersion'] = '6.0'
desired_caps['commandTimeout'] = 600
desired_caps['idleTimeout'] = 1000
desired_caps['newCommandTimeout'] = 600
return desired_caps
@abstractmethod

View File

@ -55,7 +55,7 @@ def is_uploaded():
def pytest_configure(config):
import logging
logging.basicConfig(level=logging.INFO)
if is_master(config):
if is_master(config) and config.getoption('env') == 'sauce':
if not is_uploaded():
response = requests.get(storage + latest_apk, stream=True)
response.raise_for_status()

View File

@ -4,7 +4,7 @@ from tests.preconditions import set_password_as_new_user
from views.home import HomeView
@pytest.mark.sanity
@pytest.mark.all
class TestChats(MultiplyDeviceTestCase):
def test_one_to_one_chat(self):

View File

@ -4,9 +4,10 @@ from tests.preconditions import set_password_as_new_user
from views.home import HomeView
@pytest.mark.sanity
@pytest.mark.all
class TestGroupChats(MultiplyDeviceTestCase):
@pytest.mark.chat
def test_group_chat_send_receive_messages_and_remove_user(self):
device_1, device_2 = HomeView(self.driver_1), \

View File

@ -0,0 +1,100 @@
import pytest
from tests.basetestcase import MultiplyDeviceTestCase, SingleDeviceTestCase
from tests.preconditions import set_password_as_new_user
from views.home import HomeView
from selenium.common.exceptions import TimeoutException
class TestNetwork(SingleDeviceTestCase):
@pytest.mark.network
@pytest.mark.parametrize("network", ['Ropsten', 'Rinkeby', 'Rinkeby with upstream RPC',
'Mainnet', 'Mainnet with upstream RPC'])
def test_network_switch(self, network):
home = HomeView(self.driver)
set_password_as_new_user(home)
home.back_button.click()
chats = home.get_chats()
chats.profile_button.click()
profile = chats.profile_icon.click()
login = profile.switch_network(network)
login.first_account_button.click()
login.password_input.send_keys('qwerty1234')
login.sign_in_button.click()
login.find_full_text('Chats', 20)
class TestNetworkChats(MultiplyDeviceTestCase):
networks = [['Ropsten', 'Ropsten with upstream RPC'], ['Ropsten', 'Rinkeby'],
['Ropsten', 'Rinkeby with upstream RPC'], ['Ropsten', 'Mainnet'],
['Ropsten', 'Mainnet with upstream RPC'], ['Ropsten', 'Ropsten'],
['Ropsten with upstream RPC', 'Ropsten with upstream RPC'], ['Ropsten with upstream RPC', 'Rinkeby'],
['Ropsten with upstream RPC', 'Rinkeby with upstream RPC'], ['Ropsten with upstream RPC', 'Mainnet'],
['Ropsten with upstream RPC', 'Mainnet with upstream RPC'], ['Rinkeby', 'Rinkeby'],
['Rinkeby', 'Rinkeby with upstream RPC'], ['Rinkeby', 'Mainnet'],
['Rinkeby', 'Mainnet with upstream RPC'], ['Rinkeby with upstream RPC', 'Rinkeby with upstream RPC'],
['Rinkeby with upstream RPC', 'Mainnet'], ['Rinkeby with upstream RPC', 'Mainnet with upstream RPC'],
['Mainnet', 'Mainnet'], ['Mainnet', 'Mainnet with upstream RPC'],
['Mainnet with upstream RPC', 'Mainnet with upstream RPC']]
@pytest.mark.network_chat
@pytest.mark.parametrize("network", networks,
ids=[i[0] + ' & ' + i[1] for i in networks])
def test_one_to_one_chat_between(self, network):
device_1, device_2 = HomeView(self.driver_1), HomeView(self.driver_2)
set_password_as_new_user(device_1, device_2)
device_1.back_button.click()
chats_d1 = device_1.get_chats()
chats_d1.profile_button.click()
profile_d1 = chats_d1.profile_icon.click()
key = profile_d1.public_key_text.text
if network[0] != 'Ropsten with upstream RPC':
login_d1 = profile_d1.switch_network(network[0])
login_d1.first_account_button.click()
login_d1.password_input.send_keys('qwerty1234')
login_d1.sign_in_button.click()
login_d1.find_full_text('Chats', 60)
else:
profile_d1.back_button.click()
device_2.back_button.click()
chats_d2 = device_2.get_chats()
if network[1] != 'Ropsten with upstream RPC':
chats_d2.profile_button.click()
profile_d2 = chats_d2.profile_icon.click()
login_d2 = profile_d2.switch_network(network[1])
login_d2.first_account_button.click()
login_d2.password_input.send_keys('qwerty1234')
login_d2.sign_in_button.click()
login_d2.find_full_text('Chats', 60)
chats_d2.plus_button.click()
chats_d2.add_new_contact.click()
chats_d2.public_key_edit_box.send_keys(key)
chats_d2.confirm()
chats_d2.confirm_public_key_button.click()
message_1 = network[0]
message_2 = network[1]
user_d1_name = chats_d2.user_name_text.text
chats_d2.chat_message_input.send_keys(message_2)
chats_d2.send_message_button.click()
errors = list()
try:
chats_d1.find_full_text(message_2)
except TimeoutException:
errors.append("Message '%s' wasn't received by Device #1")
one_to_one_chat_d1 = chats_d1.element_by_text(message_2, 'button')
one_to_one_chat_d1.click()
one_to_one_chat_d2 = chats_d2.element_by_text(user_d1_name, 'button')
one_to_one_chat_d2.click()
chats_d1.chat_message_input.send_keys(message_1)
chats_d1.send_message_button.click()
try:
chats_d2.find_full_text(message_1)
except TimeoutException:
errors.append("Message '%s' wasn't received by Device #2")
if errors:
msg = ''
for error in errors:
msg += (error + '\n')
pytest.fail(msg, pytrace=False)

View File

@ -6,7 +6,7 @@ from tests.preconditions import set_password_as_new_user, recover_access
from tests import basic_user, transaction_users
@pytest.mark.sanity
@pytest.mark.all
class TestAccess(SingleDeviceTestCase):
def test_recover_access(self):
@ -63,9 +63,10 @@ class TestAccess(SingleDeviceTestCase):
home.confirm()
home.find_full_text(verifications[verification]["outcome"])
@pytest.mark.parametrize("test, recipient, sender", [('wrong_password', 'A_USER', 'B_USER'),
('group_chat', 'A_USER', 'B_USER'),
('one_to_one_chat', 'B_USER', 'A_USER')],
@pytest.mark.transaction
@pytest.mark.parametrize("test, recipient, sender", [('group_chat', 'A_USER', 'B_USER'),
('one_to_one_chat', 'B_USER', 'A_USER'),
('wrong_password', 'A_USER', 'B_USER')],
ids=['group_chat', 'one_to_one_chat', 'wrong_password'])
def test_send_transaction(self, test, recipient, sender):
home = HomeView(self.driver)
@ -123,6 +124,7 @@ class TestAccess(SingleDeviceTestCase):
chats.find_full_text('to ' + transaction_users[recipient]['username'], 60)
chats.verify_balance_is_updated(initial_balance_recipient, recipient_address)
@pytest.mark.transaction
def test_send_transaction_from_daap(self):
home = HomeView(self.driver)
set_password_as_new_user(home)

View File

@ -52,8 +52,7 @@ class BaseElement(object):
action = TouchAction(self.driver)
for _ in range(5):
try:
self.find_element()
break
return self.find_element()
except NoSuchElementException:
logging.info('Scrolling to %s' % self.name)
action.press(x=0, y=1000).move_to(x=200, y=-1000).release().perform()

View File

@ -8,6 +8,12 @@ class PublicKeyText(BaseText):
super(PublicKeyText, self).__init__(driver)
self.locator = self.Locator.accessibility_id('profile-public-key')
@property
def text(self):
text = self.scroll_to_element().text
logging.info('%s is %s' % (self.name, text))
return text
class ProfileAddressText(BaseText):
@ -16,6 +22,56 @@ class ProfileAddressText(BaseText):
self.locator = self.Locator.accessibility_id('profile-address')
class NetworkSettingsButton(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@text="Network settings"]')
class Ropsten(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton.Ropsten, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@text="Ropsten"]')
class RopstenWithUpstreamRPC(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton.RopstenWithUpstreamRPC, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@text="Ropsten with upstream RPC"]')
class Rinkeby(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton.Rinkeby, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@text="Rinkeby"]')
class RinkebyWithUpstreamRPC(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton.RinkebyWithUpstreamRPC, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@text="Rinkeby with upstream RPC"]')
class Mainnet(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton.Mainnet, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@text="Mainnet"]')
class MainnetWithUpstreamRPC(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton.MainnetWithUpstreamRPC, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@text="Mainnet with upstream RPC"]')
class ConnectButton(BaseButton):
def __init__(self, driver):
super(NetworkSettingsButton.ConnectButton, self).__init__(driver)
self.locator = self.Locator.xpath_selector('//*[@text="CONNECT"]')
class ProfileViewObject(BaseViewObject):
def __init__(self, driver):
@ -24,3 +80,27 @@ class ProfileViewObject(BaseViewObject):
self.public_key_text = PublicKeyText(self.driver)
self.profile_address_text = ProfileAddressText(self.driver)
self.network_settings_button = NetworkSettingsButton(self.driver)
self.ropsten = NetworkSettingsButton.Ropsten(self.driver)
self.ropsten_upstream_rpc = NetworkSettingsButton.RopstenWithUpstreamRPC(self.driver)
self.rinkeby = NetworkSettingsButton.Rinkeby(self.driver)
self.rinkeby_upstream_rpc_ = NetworkSettingsButton.RinkebyWithUpstreamRPC(self.driver)
self.mainnet = NetworkSettingsButton.Mainnet(self.driver)
self.mainnet_upstream_rpc = NetworkSettingsButton.MainnetWithUpstreamRPC(self.driver)
self.connect_button = NetworkSettingsButton.ConnectButton(self.driver)
def switch_network(self, network):
self.network_settings_button.scroll_to_element()
self.network_settings_button.click()
networks = {'Ropsten': self.ropsten,
'Ropsten with upstream RPC': self.ropsten_upstream_rpc,
'Rinkeby': self.rinkeby,
'Rinkeby with upstream RPC': self.ropsten_upstream_rpc,
'Mainnet': self.mainnet,
'Mainnet with upstream RPC': self.mainnet_upstream_rpc}
networks[network].click()
self.connect_button.click()
from views.login import LoginView
return LoginView(self.driver)