Skip to content

Commit

Permalink
travis (#83)
Browse files Browse the repository at this point in the history
* travis
  • Loading branch information
_eternal_flame authored Jul 11, 2018
1 parent 6ca706f commit e2eaa26
Show file tree
Hide file tree
Showing 4 changed files with 157 additions and 0 deletions.
20 changes: 20 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
sudo: true
addons:
chrome: stable
firefox: latest
language: python
python:
- "3.6"
install:
- wget https://github.com/mozilla/geckodriver/releases/download/v0.21.0/geckodriver-v0.21.0-linux64.tar.gz
- mkdir geckodriver
- tar -xzf geckodriver-v0.21.0-linux64.tar.gz -C geckodriver
- export PATH=$PATH:$PWD/geckodriver
- export MOZ_HEADLESS=1
- export DISPLAY=:10
- sudo apt-get install chromium-chromedriver
- pip install selenium
- pip install beautifulsoup4
- pip install html5lib
- export PATH=$PATH:/usr/lib/chromium-browser/
script: python3 ./src/test/test.py
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
<img alt="" src="https://img.shields.io/badge/Test-mocha-blue.svg" />
<img alt="" src="https://img.shields.io/badge/jQuery-No-red.svg" />
<img alt="MIT" src="https://img.shields.io/npm/l/express.svg" />
<img alt="" src="https://travis-ci.org/pea3nut/Pxer.svg?branch=dev" />
</p>


Expand Down
Binary file added src/test/cors.xpi
Binary file not shown.
136 changes: 136 additions & 0 deletions src/test/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
import selenium.webdriver
import http.client as httpconn
import re
import urllib
import bs4
import os
import sys
import time
import json

TEST_COUNT = 19
HERE = os.path.dirname(os.path.abspath(__file__))
HAVE_FAIL = False


def login(username, password):
host = "accounts.pixiv.net"
conn = httpconn.HTTPSConnection(host)
conn.request(
"GET",
"/login?lang=en&source=pc&view_type=page&ref=wwwtop_accounts_index")
res = conn.getresponse()
login_cookie = res.getheader("set-cookie")
post_key = bs4.BeautifulSoup(res.read(), "html5lib").find(
"input", attrs={"name": "post_key"})['value']
login_sess_id = re.search(r"(?<=PHPSESSID=)(\w)*(?=;)",
login_cookie).group(0)

params = urllib.parse.urlencode({
"pixiv_id": username,
"captcha": "",
"g_recaptcha_response": "",
"password": password,
"post_key": post_key,
"lang": "en",
"source": "accounts",
"ref": "",
"return_to": "https://www.pixiv.net",
})

conn.request(
"POST",
"/api/login?lang=en",
body=params,
headers={
"origin":
"https://accounts.pixiv.net",
"referer":
"https://accounts.pixiv.net/login?lang=en&source=pc&view_type=page&ref=wwwtop_accounts_index",
"content-type":
"application/x-www-form-urlencoded",
"accept":
"application/json",
"cookie":
"show_welcome_modal=1; p_ab_id=7; p_ab_id_2=9; login_bc=1; PHPSESSID="
+ login_sess_id,
"user-agent":
"Mozilla/5.0"
})
res = conn.getresponse()
result = json.loads(res.read())
if result['error'] or ("success" not in result['body']):
print("login fail:" + str(result))
raise ValueError
return re.search(r"(?<=PHPSESSID=)[\w_]*(?=;)",
res.getheader("set-cookie")).group(0)


def print_stat(elem):
for failitem in elem.find_elements_by_class_name("fail"):
print("Failed:" + failitem.find_element_by_tag_name("h2").text.strip())


def test(browser="chrome", sessid=None):
global HAVE_FAIL
if browser == "chrome":
options = selenium.webdriver.ChromeOptions()
options.add_argument("disable-web-security")
if sys.platform == "win32":
options.add_argument("user-data-dir=D:\\temp-profile")
driver = selenium.webdriver.Chrome(
"d:\chromedriver.exe", options=options)
else:
options.add_argument("user-data-dir=/tmp/chrome")
options.add_argument("disable-dev-shm-usage")
options.add_argument("headless")
options.add_argument("no-sandbox")
driver = selenium.webdriver.Chrome(options=options)
elif browser == "firefox":
options = selenium.webdriver.FirefoxProfile()
driver = selenium.webdriver.Firefox(firefox_profile=options)
driver.install_addon(HERE + "/cors.xpi")

driver.get("https://www.pixiv.net")
time.sleep(3) # wait for enough time to load a context for cookie
driver.add_cookie({
'name': 'PHPSESSID',
'value': sessid,
'path': '/',
'secure': True,
'domain': '.pixiv.net'
})
while not driver.get_cookie('PHPSESSID'):
time.sleep(2)

driver.get("file://" + HERE + "/index.html")

while True:
num_pass = int(
driver.find_element_by_class_name("passes")
.find_element_by_tag_name("em").text)
num_fail = int(
driver.find_element_by_class_name("failures")
.find_element_by_tag_name("em").text)
if num_fail + num_pass == TEST_COUNT:
break
else:
print("{} success {} fail".format(num_pass, num_fail))
time.sleep(3)
print_stat(driver.find_element_by_id("mocha-report"))
if num_fail != 0:
print("{} tests failed.".format(num_fail))
HAVE_FAIL = True


if __name__ == "__main__":
if sys.platform=="win32":
sessid = login(sys.argv[1], sys.argv[2])
else:
sessid = login(os.getenv("PX_USER"), os.getenv("PX_PASS"))
print("==========================Chrome==========================")
test(browser="chrome", sessid=sessid)
print("==========================Firefox==========================")
test(browser="firefox", sessid=sessid)
if HAVE_FAIL:
raise RuntimeError("Test failed.")

0 comments on commit e2eaa26

Please sign in to comment.