googleapis / google-cloud-python

Google Cloud Client Library for Python
https://googleapis.github.io/google-cloud-python/
Apache License 2.0
4.85k stars 1.53k forks source link

Test top 4 APIs on GAE Flex, GKE, and GCP #3141

Closed omaray closed 7 years ago

omaray commented 7 years ago

Test BigQuery, Storage, Datastore, and Logging client libraries on all the GCP platforms (don't include GAE Standard).

Environments:

Close this issue once we confirm it all works.

daspecster commented 7 years ago

@omaray not sure I follow?

You mean windows/linux/etc?

tseaver commented 7 years ago

ISTM that we should take this as an opportunity to adopt non-PR-driven testing, and do these builds (including system test runs) periodically.

dhermes commented 7 years ago

@jonparrott Has previously mentioned they have a Jenkins server we might use. Travis has a whitelisted cron feature. CircleCI has no official cron support, but they do have an API to spawn jobs, so we could have a dumb GAE app that sent API requests to CircleCI every 24 hours to act as a cron?

tseaver commented 7 years ago

@dhermes: @omaray is asking us to run the tests on GCE / Flex / GKE, not trigger them from there. I'm suggesting that we have an instance of each which runs the full unit / system test suite periodically (nightly, perhaps?)

omaray commented 7 years ago

Yes, we need to make sure that our libraries work on GCE, GKE, and GAE Flex. We need to do what an end-user would do. Literally, write some code, use the client libraries for these 4 APIs, and deploy it to these platforms! Ideally we can test all methods. If we can automate - great. But we definitely need a full manual end-to-end test here. And we should test the top 4 libraries.

Basically: when customers will use our 1.0 libraries and deploy them on our platforms by running things like "gcloud app deploy" and what not, they should hit 0 issues. It should just work. And we need to test that.

lukesneeringer commented 7 years ago

I can set this up.

Worth noting: Right now on the ci branch, there are a small number of system tests that are a little flaky. I am adjusting timeouts and such to try to fix, but running tests once a night on GCP is not going to do us any good if we have a lot of noisy failures.

lukesneeringer commented 7 years ago

Testing on GCE

Step 1. Create Instance

Step 2. Configure Instance

lukesneeringer@python-system-tests:~$ sudo add-apt-repository ppa:fkrull/deadsnakes
[...]
lukesneeringer@python-system-tests:~$ sudo apt-get update
[...]

(The above generated too much output to paste, but it is exactly what you would expect.)

lukesneeringer@python-system-tests:~$ sudo apt-get install -y git
Reading package lists... Done
Building dependency tree       
Reading state information... Done
git is already the newest version (1:2.7.4-0ubuntu1).
0 upgraded, 0 newly installed, 0 to remove and 12 not upgraded.

Okay, could have skipped that step. Fine.

lukesneeringer@python-system-tests:~$ which python
/usr/bin/python
lukesneeringer@python-system-tests:~$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Python 2.7.12 is installed by default. I need to add 3.4, 3.5, and 3.6. (Editor's note: We actually only run system tests on 2.7 and 3.6, but I was not thinking about that at the time.)

lukesneeringer@python-system-tests:~$ sudo apt-get -y install python3.4 python3.5 python3.6
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python3.5 is already the newest version (3.5.2-2ubuntu0~16.04.1).
The following additional packages will be installed:
  libpython3.4-minimal libpython3.4-stdlib libpython3.6-minimal libpython3.6-stdlib python3.4-minimal
  python3.6-minimal
Suggested packages:
  python3.4-venv python3.4-doc binutils binfmt-support python3.6-venv python3.6-doc
The following NEW packages will be installed:
  libpython3.4-minimal libpython3.4-stdlib libpython3.6-minimal libpython3.6-stdlib python3.4
  python3.4-minimal python3.6 python3.6-minimal
0 upgraded, 8 newly installed, 0 to remove and 12 not upgraded.
[...]
Setting up python3.4 (3.4.5-1~xenial1) ...
Setting up python3.6 (3.6.0-1+xenial1) ...

Python 3.4 and 3.6 were installed. I do not see Python 3.5; I am guessing it is packaged with Ubuntu 16.04 by default...

lukesneeringer@python-system-tests:~$ which python3.5
/usr/bin/python3.5

It is. Moving on.

lukesneeringer@python-system-tests:~$ which pip
lukesneeringer@python-system-tests:~$ sudo apt-get install -y python-pip
[...]

Finally, install nox.

lukesneeringer@python-system-tests:~$ sudo pip install nox-automation
The directory '/home/lukesneeringer/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/lukesneeringer/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting nox-automation
  Downloading nox-automation-0.10.0.tar.gz
Collecting colorlog<3.0.0,>=2.6.1 (from nox-automation)
  Downloading colorlog-2.10.0-py2.py3-none-any.whl
Collecting py<2.0.0,>=1.4.0 (from nox-automation)
  Downloading py-1.4.33-py2.py3-none-any.whl (83kB)
    100% |████████████████████████████████| 92kB 4.3MB/s 
Requirement already satisfied (use --upgrade to upgrade): six<2.0.0,>=1.4.0 in /usr/lib/python2.7/dist-packages (from nox-automation)
Collecting virtualenv>=14.0.0 (from nox-automation)
  Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
    100% |████████████████████████████████| 1.8MB 740kB/s 
Installing collected packages: colorlog, py, virtualenv, nox-automation
  Running setup.py install for nox-automation ... done
Successfully installed colorlog-2.10.0 nox-automation-0.10.0 py-1.4.33 virtualenv-15.1.0
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

Now I am ready to clone the repo:

lukesneeringer@python-system-tests:~$ git clone https://github.com/GoogleCloudPlatform/google-cloud-python.git
Cloning into 'google-cloud-python'...
remote: Counting objects: 173114, done.
remote: Compressing objects: 100% (168/168), done.
remote: Total 173114 (delta 86), reused 21 (delta 21), pack-reused 172917
Receiving objects: 100% (173114/173114), 114.54 MiB | 24.91 MiB/s, done.
Resolving deltas: 100% (145162/145162), done.
Checking connectivity... done.
lukesneeringer@python-system-tests:~$ cd google-cloud-python/

Use my ci branch, which is a work in progress, but better suited for this purpose:

lukesneeringer@python-system-tests:~/google-cloud-python$ git checkout --track -b ci origin/ci
Branch ci set up to track remote branch ci from origin.
Switched to a new branch 'ci'

Step 3. Credentials

Copy credentials from my workstation:

lukesneeringer@lukesneeringer0:~/Code/Google/google-cloud-python:ci$ scp /usr/local/google/home/lukesneeringer/.google-cloud-credentials/gcloud-python.json 104.198.41.200:~
gcloud-python.json                                                    100% 2433     2.4KB/s   00:00    

Set up the VM to use them:

lukesneeringer@python-system-tests:~/google-cloud-python$ export GOOGLE_APPLICATION_CREDENTIALS=~/gcloud-python.json 

Step 4. Run System Tests

datastore

lukesneeringer@python-system-tests:~/google-cloud-python$ cd datastore/
lukesneeringer@python-system-tests:~/google-cloud-python/datastore$ nox -e system_tests
nox > Running session system_tests(python_version='2.7')
nox > virtualenv /home/lukesneeringer/google-cloud-python/datastore/.nox/system_tests-python_version-2-7 -p python2.7
nox > chdir /home/lukesneeringer/google-cloud-python/datastore
nox > pip install --upgrade mock pytest ../core/ ../test_utils/
nox > pip install --upgrade .
nox > py.test --quiet tests/system
.....................
21 passed in 6.65 seconds
nox > Session system_tests(python_version='2.7') successful. :)
nox > Running session system_tests(python_version='3.6')
nox > virtualenv /home/lukesneeringer/google-cloud-python/datastore/.nox/system_tests-python_version-3-6 -p python3.6
nox > chdir /home/lukesneeringer/google-cloud-python/datastore
nox > pip install --upgrade mock pytest ../core/ ../test_utils/
nox > pip install --upgrade .
nox > py.test --quiet tests/system
.....................
21 passed in 6.53 seconds
nox > Session system_tests(python_version='3.6') successful. :)
nox > Ran multiple sessions:
nox > * system_tests(python_version='2.7'): passed
nox > * system_tests(python_version='3.6'): passed

logging

lukesneeringer@python-system-tests:~/google-cloud-python/datastore$ cd ../logging/
lukesneeringer@python-system-tests:~/google-cloud-python/logging$ nox -e system_tests
nox > Running session system_tests(python_version='2.7')
nox > virtualenv /home/lukesneeringer/google-cloud-python/logging/.nox/system_tests-python_version-2-7 -p python2.7
nox > chdir /home/lukesneeringer/google-cloud-python/logging
nox > pip install --upgrade mock pytest ../core/ ../test_utils/ ../bigquery/ ../pubsub/ ../storage/
nox > pip install --upgrade .
nox > py.test --quiet tests/system.py
..................
18 passed in 55.04 seconds
nox > Session system_tests(python_version='2.7') successful. :)
nox > Running session system_tests(python_version='3.6')
nox > virtualenv /home/lukesneeringer/google-cloud-python/logging/.nox/system_tests-python_version-3-6 -p python3.6
nox > chdir /home/lukesneeringer/google-cloud-python/logging
nox > pip install --upgrade mock pytest ../core/ ../test_utils/ ../bigquery/ ../pubsub/ ../storage/
nox > pip install --upgrade .
nox > py.test --quiet tests/system.py
..................
18 passed in 51.71 seconds
nox > Session system_tests(python_version='3.6') successful. :)
nox > Ran multiple sessions:
nox > * system_tests(python_version='2.7'): passed
nox > * system_tests(python_version='3.6'): passed

storage

lukesneeringer@python-system-tests:~/google-cloud-python/storage$ nox -e system_tests
nox > Running session system_tests(python_version='2.7')
nox > virtualenv /home/lukesneeringer/google-cloud-python/storage/.nox/system_tests-python_version-2-7 -p python2.7
nox > chdir /home/lukesneeringer/google-cloud-python/storage
nox > pip install --upgrade mock pytest ../core/ ../test_utils/
nox > pip install --upgrade .
nox > py.test --quiet tests/system.py
....................
20 passed in 19.81 seconds
nox > Session system_tests(python_version='2.7') successful. :)
nox > Running session system_tests(python_version='3.6')
nox > virtualenv /home/lukesneeringer/google-cloud-python/storage/.nox/system_tests-python_version-3-6 -p python3.6
nox > chdir /home/lukesneeringer/google-cloud-python/storage
nox > pip install --upgrade mock pytest ../core/ ../test_utils/
nox > pip install --upgrade .
nox > py.test --quiet tests/system.py
....................
20 passed in 20.14 seconds
nox > Session system_tests(python_version='3.6') successful. :)
nox > Ran multiple sessions:
nox > * system_tests(python_version='2.7'): passed
nox > * system_tests(python_version='3.6'): passed

bigquery

lukesneeringer@python-system-tests:~/google-cloud-python/storage$ cd ../bigquery/
lukesneeringer@python-system-tests:~/google-cloud-python/bigquery$ nox -e system_tests
nox > Running session system_tests(python_version='2.7')
nox > virtualenv /home/lukesneeringer/google-cloud-python/bigquery/.nox/system_tests-python_version-2-7 -p python2.7
nox > chdir /home/lukesneeringer/google-cloud-python/bigquery
nox > pip install --upgrade mock pytest ../core/ ../test_utils/ ../storage/
nox > pip install --upgrade .
nox > py.test --quiet tests/system.py
.................
17 passed in 63.49 seconds
nox > Session system_tests(python_version='2.7') successful. :)
nox > Running session system_tests(python_version='3.6')
nox > virtualenv /home/lukesneeringer/google-cloud-python/bigquery/.nox/system_tests-python_version-3-6 -p python3.6
nox > chdir /home/lukesneeringer/google-cloud-python/bigquery
nox > pip install --upgrade mock pytest ../core/ ../test_utils/ ../storage/
nox > pip install --upgrade .
nox > py.test --quiet tests/system.py
.................
17 passed in 60.56 seconds
nox > Session system_tests(python_version='3.6') successful. :)
nox > Ran multiple sessions:
nox > * system_tests(python_version='2.7'): passed
nox > * system_tests(python_version='3.6'): passed

Step 5. :tada: :beer:

lukesneeringer commented 7 years ago

Testing GKE

Step 1. Upload Docker Image to GKE

The contents of the Dockerfile is:

FROM googleapis/nox:0.10.0

# Clone the Google Cloud Platform repository at a single point
# in time.
ENV GIT_SSL_NO_VERIFY true
RUN mkdir -p /var/code/ \
  && cd /var/code/ \
  && git clone https://github.com/GoogleCloudPlatform/google-cloud-python gcp \
  # Not necessary once #3146 is merged.
  && cd gcp \
  && git checkout --track -b ci origin/ci

WORKDIR /var/code/gcp/

# By default, run nox.
CMD ["nox"]

Step 2. Create Cluster

~Editor's note: I did not see any way to specify what Docker image I was using (but maybe that is because the project only had one configured)?~ It comes in the YAML file, see step 4.

Step 3. Connect to the Cluster

Taken from the "Connect' button on Pantheon:

lukesneeringer@lukesneeringer0:~/Code/Google/google-cloud-python:ci$ gcloud container clusters get-credentials python-systests --zone us-central1-a --project $PROJECT_NAME
Fetching cluster endpoint and auth data.
kubeconfig entry generated for python-systests.
lukesneeringer@lukesneeringer0:~/Code/Google/google-cloud-python:ci$ kubectl proxy
Starting to serve on 127.0.0.1:8001

Then connecting to 127.0.0.1:8001/ui in Chrome.

~At this point, I have determined that my test plan is not correctly attuned to GKE (or GAE Flex); it wants to run a single entry point into perpetuity, which is not what I am doing.~

~It looks like I need to create some kind of quick app to run tests in this context. Circling back to it later.~

Unblocked by @ethanbao, who actually knows something about GKE.

Step 4. Upload YAML

Ethan provided me with a YAML file which I have modified for my use (note, BigQuery specific):

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    run: system-tests
  name: system-tests
spec:
  replicas: 1
  selector:
    matchLabels:
      run: prod
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: prod
    spec:
      containers:
      - image: us.gcr.io/[...]/google-cloud-python:8d17bf4d
        imagePullPolicy: Always
        name: prod
        resources: {}
        command:
          - nox
        args:
          - -f
          - bigquery/nox.py
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      securityContext: {}

Step 5. View Logs

What this ended up doing was creating a GKE instance that runs the tests (which takes about a minute and a half) and then terminates, and Kubernetes brings up a new one, which runs the tests, terminates, etc.

bigquery

I was not able to time it such that I actually got to view the full test run, because as soon as the test run finishes, it wipes out the thing and starts fresh.

It is pretty obvious from the intermediate points that it works, though:

2017-03-20T17:38:41.867297603Z nox > Running session unit_tests(python_version='2.7')
2017-03-20T17:38:41.868034729Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-2-7 -p python2.7
2017-03-20T17:38:45.204915789Z nox > chdir /var/code/gcp/bigquery
2017-03-20T17:38:45.205213913Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T17:38:53.675002424Z nox > pip install --upgrade -e .
2017-03-20T17:38:55.778582413Z nox > py.test --quiet --cov=google.cloud.bigquery --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T17:38:58.500413921Z ...........................................................................................................................................................................................................................................................................................................................................................................
2017-03-20T17:38:58.500545789Z 
2017-03-20T17:38:58.500554218Z 
2017-03-20T17:38:58.500808558Z 363 passed in 2.30 seconds
2017-03-20T17:38:58.533680737Z nox > Session unit_tests(python_version='2.7') successful. :)
2017-03-20T17:38:58.533933633Z nox > Running session unit_tests(python_version='3.4')
2017-03-20T17:38:58.534518473Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-4 -p python3.4
2017-03-20T17:39:01.470835923Z nox > chdir /var/code/gcp/bigquery
2017-03-20T17:39:01.471128138Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T17:39:09.105851035Z nox > pip install --upgrade -e .
2017-03-20T17:39:11.476746984Z nox > py.test --quiet --cov=google.cloud.bigquery --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T17:39:14.791494579Z ...........................................................................................................................................................................................................................................................................................................................................................................
2017-03-20T17:39:14.791625921Z 
2017-03-20T17:39:14.791645688Z 
2017-03-20T17:39:14.791912719Z 363 passed in 2.87 seconds
2017-03-20T17:39:14.937459445Z nox > Session unit_tests(python_version='3.4') successful. :)
2017-03-20T17:39:14.937713728Z nox > Running session unit_tests(python_version='3.5')
2017-03-20T17:39:14.938297179Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-5 -p python3.5
2017-03-20T17:39:18.605331196Z nox > chdir /var/code/gcp/bigquery
2017-03-20T17:39:18.605706587Z nox > pip install --upgrade mock pytest pytest-cov ../core/

It seems unlikely that unit tests would fail on Python 3.6 only, so I am calling that a :tada: and doing the same for the other three APIs.

datastore

Same story.

2017-03-20T18:43:48.041755964Z nox > Running session unit_tests(python_version='2.7')
2017-03-20T18:43:48.042567521Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-2-7 -p python2.7
2017-03-20T18:43:51.583267704Z nox > chdir /var/code/gcp/datastore
2017-03-20T18:43:51.583582411Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T18:44:00.736972806Z nox > pip install --upgrade -e .
2017-03-20T18:44:11.919031700Z nox > py.test --quiet --cov=google.cloud.datastore --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T18:44:14.256745746Z ..............................................................................................................................................................................................................................................................................................................................
2017-03-20T18:44:14.256884008Z 
2017-03-20T18:44:14.256901620Z 
2017-03-20T18:44:14.257170513Z 318 passed in 1.91 seconds
2017-03-20T18:44:14.297060001Z nox > Session unit_tests(python_version='2.7') successful. :)
2017-03-20T18:44:14.297304749Z nox > Running session unit_tests(python_version='3.4')
2017-03-20T18:44:14.297904050Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-4 -p python3.4
2017-03-20T18:44:17.331453357Z nox > chdir /var/code/gcp/datastore
2017-03-20T18:44:17.331750222Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T18:44:24.437507831Z nox > pip install --upgrade -e .
2017-03-20T18:44:33.676615523Z nox > py.test --quiet --cov=google.cloud.datastore --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T18:44:36.710936369Z ..............................................................................................................................................................................................................................................................................................................................
2017-03-20T18:44:36.711113286Z 
2017-03-20T18:44:36.711122584Z 
2017-03-20T18:44:36.711385083Z 318 passed in 2.46 seconds
2017-03-20T18:44:36.886405985Z nox > Session unit_tests(python_version='3.4') successful. :)
2017-03-20T18:44:36.886701329Z nox > Running session unit_tests(python_version='3.5')
2017-03-20T18:44:36.887305295Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-5 -p python3.5
2017-03-20T18:44:40.932601876Z nox > chdir /var/code/gcp/datastore
2017-03-20T18:44:40.932935353Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T18:44:48.243447309Z nox > pip install --upgrade -e .
2017-03-20T18:44:57.392770161Z nox > py.test --quiet --cov=google.cloud.datastore --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T18:44:59.925228715Z ..............................................................................................................................................................................................................................................................................................................................
2017-03-20T18:44:59.925361113Z 
2017-03-20T18:44:59.925369920Z 
2017-03-20T18:44:59.925646960Z 318 passed in 2.11 seconds
2017-03-20T18:45:00.000892670Z nox > Session unit_tests(python_version='3.5') successful. :)
2017-03-20T18:45:00.001167323Z nox > Running session unit_tests(python_version='3.6')
2017-03-20T18:45:00.001771821Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-6 -p python3.6
2017-03-20T18:45:03.154070821Z nox > chdir /var/code/gcp/datastore
2017-03-20T18:45:03.154416709Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T18:45:11.521943119Z nox > pip install --upgrade -e .

logging

Same story:

2017-03-20T18:48:05.945045228Z nox > Running session unit_tests(python_version='2.7')
2017-03-20T18:48:05.946803063Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-2-7 -p python2.7
2017-03-20T18:48:11.864880209Z nox > chdir /var/code/gcp/logging
2017-03-20T18:48:11.865613075Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T18:48:28.020401580Z nox > pip install --upgrade -e .
2017-03-20T18:48:41.478339541Z nox > py.test --quiet --cov=google.cloud.logging --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T18:48:46.805699081Z ........................................................................................................................................................................................
2017-03-20T18:48:46.805843115Z 
2017-03-20T18:48:46.805852160Z 
2017-03-20T18:48:46.806115375Z 184 passed in 4.89 seconds
2017-03-20T18:48:46.855506347Z nox > Session unit_tests(python_version='2.7') successful. :)
2017-03-20T18:48:46.855768481Z nox > Running session unit_tests(python_version='3.4')
2017-03-20T18:48:46.856377129Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-4 -p python3.4
2017-03-20T18:48:50.276947250Z nox > chdir /var/code/gcp/logging
2017-03-20T18:48:50.277253471Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T18:48:59.951324958Z nox > pip install --upgrade -e .
2017-03-20T18:49:10.973250298Z nox > py.test --quiet --cov=google.cloud.logging --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T18:49:16.270108023Z ........................................................................................................................................................................................
2017-03-20T18:49:16.270250469Z 
2017-03-20T18:49:16.270259063Z 
2017-03-20T18:49:16.270506709Z 184 passed in 4.83 seconds
2017-03-20T18:49:16.365648384Z nox > Session unit_tests(python_version='3.4') successful. :)
2017-03-20T18:49:16.365895759Z nox > Running session unit_tests(python_version='3.5')
2017-03-20T18:49:16.366476239Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-5 -p python3.5
2017-03-20T18:49:20.467473224Z nox > chdir /var/code/gcp/logging
2017-03-20T18:49:20.468715717Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T18:49:28.424825023Z nox > pip install --upgrade -e .

storage

Got a full run on this one:

2017-03-20T20:30:47.196036044Z nox > Running session unit_tests(python_version='2.7')
2017-03-20T20:30:47.196729722Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-2-7 -p python2.7
2017-03-20T20:30:50.114339243Z nox > chdir /var/code/gcp/storage
2017-03-20T20:30:50.114639655Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T20:30:57.568632879Z nox > pip install --upgrade -e .
2017-03-20T20:30:59.598390170Z nox > py.test --quiet --cov=google.cloud.storage --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T20:31:01.729090448Z ........................................................................................................................................................................................................................................................................................................
2017-03-20T20:31:01.729223888Z 
2017-03-20T20:31:01.729240125Z 
2017-03-20T20:31:01.729505420Z 296 passed in 1.70 seconds
2017-03-20T20:31:01.766425688Z nox > Session unit_tests(python_version='2.7') successful. :)
2017-03-20T20:31:01.766699318Z nox > Running session unit_tests(python_version='3.4')
2017-03-20T20:31:01.767287668Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-4 -p python3.4
2017-03-20T20:31:04.833314656Z nox > chdir /var/code/gcp/storage
2017-03-20T20:31:04.833635003Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T20:31:11.877153514Z nox > pip install --upgrade -e .
2017-03-20T20:31:13.892741951Z nox > py.test --quiet --cov=google.cloud.storage --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T20:31:16.197667298Z ........................................................................................................................................................................................................................................................................................................
2017-03-20T20:31:16.197799452Z 
2017-03-20T20:31:16.197807966Z 
2017-03-20T20:31:16.198061572Z 296 passed in 1.91 seconds
2017-03-20T20:31:16.264973875Z nox > Session unit_tests(python_version='3.4') successful. :)
2017-03-20T20:31:16.265216968Z nox > Running session unit_tests(python_version='3.5')
2017-03-20T20:31:16.265818004Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-5 -p python3.5
2017-03-20T20:31:19.374545303Z nox > chdir /var/code/gcp/storage
2017-03-20T20:31:19.374851303Z nox > pip install --upgrade mock pytest pytest-cov ../core/
2017-03-20T20:31:26.562491222Z nox > pip install --upgrade -e .
2017-03-20T20:31:28.579543285Z nox > py.test --quiet --cov=google.cloud.storage --cov=tests.unit --cov-append --cov-config=.coveragerc --cov-report= --cov-fail-under=97 tests/unit
2017-03-20T20:31:31.338525175Z ........................................................................................................................................................................................................................................................................................................
2017-03-20T20:31:31.338690379Z 
2017-03-20T20:31:31.338699389Z 
2017-03-20T20:31:31.338974862Z 296 passed in 2.36 seconds
2017-03-20T20:31:31.415749484Z nox > Session unit_tests(python_version='3.5') successful. :)
2017-03-20T20:31:31.415992650Z nox > Running session unit_tests(python_version='3.6')
2017-03-20T20:31:31.416602232Z nox > virtualenv /var/code/gcp/.nox/unit_tests-python_version-3-6 -p python3.6
2017-03-20T20:31:34.761992362Z nox > chdir /var/code/gcp/storage
2017-03-20T20:31:34.762302408Z nox > pip install --upgrade mock pytest pytest-cov ../core/

Step 6. :tada: